Запустить python сценарий из Node.js (child_process) с именованными аргументами - PullRequest
0 голосов
/ 18 июня 2020

У меня есть сценарий python, который можно запустить с этим аргументом в командной строке:

python2 arg1 --infile abc.csv --encrypt true --keyfile xyz.bin 1234 WOW path

Однако, если я попытаюсь сделать то же самое из дочернего процесса Node.js, я получу ошибка:

const spawn = require("child_process").spawn;

const process = spawn("python2", [
  path.join(rootDir, "public", "python", "script.py"),
  "arg1",
  "--infile abc.csv,
  "--encrypt true",
  "--keyfile xyz.bin",
  "1234",
  "WOW",
  "path",
]);

Он не работает и выдает ошибку. Но если я запускаю без ИМЕНОВАННЫХ АРГУМЕНТОВ (--encrypt true) et c, он работает успешно:

const process = spawn("python2", [
  path.join(rootDir, "public", "python", "script.py"),
  "arg1",
  "1234",
  "WOW",
  "path",
]);

Я думаю, что мой способ передачи ИМЕНОВАННЫХ аргументов может быть неправильным. Пожалуйста, помогите!

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вам необходимо разделить каждую часть аргумента:

const process = spawn("python2", [
  path.join(rootDir, "public", "python", "script.py"),
  "arg1",
  "--infile",
      "abc.csv", // indentation for clarity, it's not necessary
  "--encrypt",
      "true",
  "--keyfile",
      "xyz.bin",
  "1234",
  "WOW",
  "path",
]);

Ваш исходный сценарий аналогичен запуску этого в командной строке:

python script.py arg1 "--infile abc.csv" "--encrypt true" "--keyfile xyz.bin" 1234 WOW path

В основном вы передаете аргумент с именем --infile abc.csv со значением --encrypt true. Это не то, чем вы собираетесь заниматься. Вы хотите:

python script.py arg1 --infile abc.csv --encrypt true --keyfile xyz.bin 1234 WOW path
0 голосов
/ 18 июня 2020

Вам может пригодиться эта статья:

https://medium.com/swlh/run-python-script-from-node-js-and-send-data-to-browser-15677fcf199f

...