писать в stdout nodejs

323
17 октября 2017, 05:02

index.js:

var sys = require('sys'),
    exec = require('child_process').exec;
...
var result;
child = exec('phantomjs ./phantom/folder/search.js',
    function(error, stdout, stderr) {
        result = stdout;
        console.log(result);
    }
);

stdout пустой, в файле search.js есть переменная которую я хочу в stdout передать. не могу разобраться как это сделать?

UPD:

var result;
child = exec('phantomjs ./phantom/iaai/search.js',
    function(error, stdout, stderr) {
        result = stdout;
        console.log(result) // корректный ответ содержащий stdout
    }
);
console.log(result); // undefined

По какой-то причине stdout не записывается в result. Как получить доступ к этим данным за пределами function(error, stdout, stderr) {} ?

Answer 1

Функция function(error, stdout, stderr) принимает в параметре stdout то, что помещает в stdout выполняемый ей процесс. Поэтому требуется в search.js что-нибудь вывести в stdout. Например при помощи console.log('что-то')

К обновлению в вопросе

exec - это асинхронная функция, она возвращает результат сразу же. И сразу после этого вы вызываете console.log(result); При этом, конечно же, result неопределен, потому что при объявлении вы его не инициализировали, а function(error, stdout, stderr) внутри exec еще не выполнилась, она выполнится асинхронно, после завершения запущенного процесса.

Для того, чтобы "все работало" вам надо делать свой код так же асинхронным или использовать синхронный запуск процесса

READ ALSO
Вызвать функцию JS по имени в переменной

Вызвать функцию JS по имени в переменной

Есть форма с дата-атрибутом "callback", он содержит название функции, которая должна запуститься после отработки AJAX

311
Вывести переменную внутри объекта

Вывести переменную внутри объекта

Как вывести переменную fullName ? Почему этот код не работает и не выводится "Bob Ross"?

245