Как получить данные из скрипта Python на Node.js?

Я пытаюсь получить данные из скрипта Python на сервере Node.js. Мне нужно запустить этот скрипт Python с правами суперпользователя.

child.execFile('sudo python /home/pi/node.js_scripts/app/request.py', function (err, stdout, stderr) {
if (err) throw err;
if (stderr) throw err;
console.log(stdout); }); 

Но я получаю эту ошибку:

Error: spawn sudo python /home/pi/node.js_scripts/app/request.py ENOENT
    at exports._errnoException (util.js:746:11)
    at Process.ChildProcess._handle.onexit (child_process.js:1046:32)
    at child_process.js:1137:20
    at process._tickCallback (node.js:355:11)

Как я могу решить свою проблему?


person Nick    schedule 28.07.2015    source источник


Ответы (1)


Проблема в том, что execFile указывает путь к файлу. Этот файл должен быть исполняемым. В вашем случае вы пытаетесь выполнить команду. Вместо этого попробуйте child.exec() или создайте небольшой исполняемый сценарий оболочки, который запускает эту команду.

Кроме того, давать вашему серверу node.js разрешения sudo неразумно. У меня нет хороших советов о том, как решить эту проблему. Возможно, загляните в setuid. Это действительно зависит от вашего варианта использования (и это должен быть отдельный вопрос).

person André Laszlo    schedule 28.07.2015
comment
Спасибо, я пробовал child.exec(), но он может вернуть только 200 КБ из-за емкости буфера. Можно ли запустить процесс с помощью sudo? Я согласен с вами по поводу разрешений sudo, но на самом деле я не знаю лучшего способа избежать этого. - person Nick; 28.07.2015
comment
Я думаю, у вас будет такая же проблема с execFile? Вы можете использовать опцию maxBuffer с exec, но, возможно, вам следует читать из дочернего элемента, чтобы ваш буфер не заполнялся. См., например, это. - person André Laszlo; 28.07.2015
comment
Вы также можете перенаправить вывод в файл, - person André Laszlo; 28.07.2015