Запуск NodeJS от Python - PullRequest
       2

Запуск NodeJS от Python

0 голосов
/ 12 июля 2020

Мне сложно понять, как запустить NodeJS из Python. У меня нет проблем с запуском ShellScript из Python и NodeJS из ShellScript, но я не могу получить NodeJS из Python, я просто получаю следующий результат:

b"

Это упрощенная версия моих скриптов.

NodeJS Я пытаюсь запустить изнутри Python.

#!/usr/bin/env node
console.log("Hello " + process.argv[2]);

А вот Python, используя Python3.

from datetime import datetime
import json
import os
import re
import sys
import subprocess

if __name__ == '__main__':
        p = subprocess.Popen(['/Users/Brett/scripts/hello.js', 'Brett'], stdout=subprocess.PIPE)
        out = p.stdout.read()
        print(out)
        

Спасибо за помощь! Я очень признателен.

РЕДАКТИРОВАТЬ: У меня нет проблем с выполнением следующего из командной строки, поскольку 'hello. js' является исполняемым:

hello.js 'Brett'

shell=true не исправляет.

Кроме того, я использую macOS Catalina 10.15.5, поэтому моя оболочка - zsh.

Если я добавлю node в начало команды, я не получу такого файла или каталог для node, я пробовал так: p = subprocess.Popen(['/Users/Brett/scripts/hello.js', 'Brett'], stdout=subprocess.PIPE)

Ответы [ 3 ]

1 голос
/ 12 июля 2020

Хорошо, после некоторого тестирования, основанного на комментариях Макса Стэнли:

Здесь есть несоответствие между Linux и MacOS в отношении заполнения массива argv. На Ma c вам понадобится второй индекс (1), а на Linux вам понадобится третий (2).

Я рекомендую использовать парсер аргументов командной строки, например command-line -args , который должен скрыть различия платформ.

Тем временем вы можете указать узел в вызове подпроцесса python Popen (["node", "/ Users / Brett / scripts / hello. js "," Brett "]), который ведет себя одинаково на обоих.

1 голос
/ 12 июля 2020

Проверив это в моей системе, похоже, что вам нужно либо сделать файл hello. js исполняемым chmod +x ./hello.js, либо вам нужно добавить 'node' в начало списка аргументов Popen, как это сделал @Jared сказал.

0 голосов
/ 12 июля 2020

Спасибо всем за ответы. Все были очень любезны. Особенно @ max-stanley и @ jared-smith.

У меня сработало следующее:

p = subprocess.Popen(['/usr/local/bin/node', '/Users/Brett/scripts/hello.js', 'Brett'], stdout=subprocess.PIPE)
out = p.stdout.read()
print(out)

Не уверен, почему он не работает с shebang в исполняемом файле js, но я не собираюсь этого делать, поэтому я просто возьму рабочее решение и продолжу. ; -)

Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...