#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 "'"]
};