Передавать именованные аргументы скрипту python через python-shell вкл. node.js без кавычек

#python #node.js #python-3.x

#python #node.js #python-3.x

Вопрос:

Я вызываю скрипт Python, используя PythonShell этот код :

 let python_options = {
    mode: "text",
    pythonPath: "python",
    scriptPath:"./python/",
    args: ["-fil '" file_path "'"]
};
let pyshell = new PythonShell.PythonShell('my_script.py',python_options);
pyshell.on('message', function(message) {
    console.log(message);
});
pyshell.end( function(err,code,signal) {
    if (err) console.log("Error %j", err);
    console.log('The exit code was: '   code);
    console.log('The exit signal was: '   signal);

    // console.log("results: %j", results);
    res.send(code);
});
  

затем в моем скрипте Python я делаю

 import argparse
parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument("-fil", '--file', required=False, default=None)
  

Сообщение об ошибке, которое я получаю при вызове скрипта, является

 my_script.py: error: unrecognized arguments: -fil 'path_to_the_file'
  

Моя проблема в том, что оболочка передает "-fil path_to_the_file" в CLI, который интерпретируется как один аргумент argparse вместо -fil path_to_the_file того, который был бы правильно интерпретирован argparse .

Как я могу удалить кавычки в PythonShell ?

Комментарии:

1. вы пробовали передавать ему список с несколькими аргументами вместо списка со строкой, представляющей все аргументы? например, аргументы: [«-fil», file_path]

2. К сожалению, я получаю ту же ошибку. Когда я пробую себя в CLI, это работает даже с кавычками, поэтому теперь я менее уверен в своей диагностике…

3. "-fil " "paht_to_the_file" работает в командной строке на случай, если мой комментарий выше был неясен. Но вызов PythonShell по-прежнему завершается ошибкой с тем же сообщением об ошибке.

4. попробуйте —file вместо fil, дайте мне знать, что произойдет, я думаю, что ваш код на python неправильный. Вы уверены, что говорите python my_script.py «-fil » «paht_to_the_file» работает? Python не должен понимать аргумент с кавычками AFAIK, он примет его как позиционный аргумент, а не как ключевое слово

5. На самом деле я изменил свой код после того, как задал вопрос, чтобы удалить ярлыки из argparse экземпляра. Итак, я уже вызываю его с --file , и да, это работает только в командной строке. python 3.7 в Windows

Ответ №1:

В случае, если это может кому-либо помочь, решение состоит в том, чтобы сделать :

 let python_options = {
    mode: "text",
    pythonPath: "python",
    scriptPath:"./python/",
    args: ["-fil",file_path] // instead of args: ["-fil '" file_path "'"]
};