Вопрос по node.js, stdin, phantomjs, child-process, external-process – Дочерний процесс Nodejs: запись в stdin из уже инициализированного процесса

39

Я пытаюсь порождать внешний процессphantomjs используя узелchild_process и затем отправить информацию этому процессу после его инициализации, возможно ли это?

У меня есть следующий код:

var spawn = require('child_process').spawn,
    child = spawn('phantomjs');

child.stdin.setEncoding = 'utf-8';
child.stdout.pipe(process.stdout);

child.stdin.write("console.log('Hello from PhantomJS')");

Но единственное, что я получил на stdout, - это начальная подсказка для консоли phantomjs.

phantomjs> 

Так кажетсяchild.stdin.write не оказывает никакого влияния.

Я не уверен, что могу послать дополнительную информацию фантомам после первоначального появления.

заранее спасибо.

Ваш Ответ

1   ответ
70

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

var spawn = require('child_process').spawn,
    child = spawn('phantomjs');

child.stdin.setEncoding('utf-8');
child.stdout.pipe(process.stdout);

child.stdin.write("console.log('Hello from PhantomJS')\n");

child.stdin.end(); /// this call seems necessary, at least with plain node.js executable
Я добавил вызов child.stdin.end () Alexander Mills
Да, но почему? или, возможно, точка с запятой вместо новой строки? Alexander Mills
@AlexanderMills child.stdin.end () isn 't критическое, в моем случае мне нужно, чтобы процесс оставался открытым. И пиши как мне нужно. выполнить некоторую команду tts (так будет быстро). И это прекрасно работает без child.stdin.end () [\ r \ n - критическая вещь, которая хорошо известна] [I 'Я порождаю powershell.exe, нене знаю о фантомах]. [Как это'для тебя по-другому? Как это'критично? ти] Mohamed Allal
child.stdin.end() Звонок имеет решающее значение. Некоторое время ударился головой, пока я не нашел это. Спасибо @AlexanderMills karmakaze

Похожие вопросы