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) {} ?
Функция function(error, stdout, stderr) принимает в параметре stdout то, что помещает в stdout выполняемый ей процесс. Поэтому требуется в search.js что-нибудь вывести в stdout. Например при помощи console.log('что-то')
exec - это асинхронная функция, она возвращает результат сразу же. И сразу после этого вы вызываете console.log(result); При этом, конечно же, result неопределен, потому что при объявлении вы его не инициализировали, а function(error, stdout, stderr) внутри exec еще не выполнилась, она выполнится асинхронно, после завершения запущенного процесса.
Для того, чтобы "все работало" вам надо делать свой код так же асинхронным или использовать синхронный запуск процесса
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники