Дочерний процесс — Node.js с CasperJs: как включить аргументы?

Я пытаюсь настроить дочерний процесс NodeJS с аргументами. Если я запускаю дочерний процесс с узлом, он работает нормально, но если вместо этого я запускаю casperjs, он не работает. Я убедился, что casperjs работает правильно, с другим скриптом casperjs, который работает нормально. Вот моя установка:

родитель.js

var exec = require('child_process').exec;

exec('node child.js', {
    env: {
        number: 123
    }
}, function(err, stdout, stderr) {
    console.log('stdout: ' + stdout);
    console.log('stderr: ' + stderr);
    if (err !== null) {
        console.log('exec error: ' + err);
    }
});

parent2.js

var exec = require('child_process').exec;

exec('casperjs child.js', {
    env: {
        number: 123
    }
}, function(err, stdout, stderr) {
    console.log('stdout: ' + stdout);
    console.log('stderr: ' + stderr);
    if (err !== null) {
        console.log('exec error: ' + err);
    }
});

ребенок.js

var number = process.env.number;
console.log(typeof(number));

number = parseInt(number, 10);
console.log((number));

Вывод

$ node parent.js
stdout: string
123

stderr: 

$ node parent2.js
stdout: Fatal: [Errno 2] No such file or directory; did you install phantomjs?

stderr: 
exec error: Error: Command failed:

Почему я не могу использовать аргументы при запуске дочернего процесса с помощью casperjs?


person Senju    schedule 15.06.2015    source источник
comment
PhantomJS (и CasperJS) не имеют глобального свойства process.   -  person Artjom B.    schedule 15.06.2015
comment
@ArtjomB. так вообще не получится?   -  person Senju    schedule 16.06.2015
comment
По крайней мере, не так. В PhantomJS вам нужно будет потребовать system и использовать system.env. Просто сравните API между PhantomJS и node.   -  person Artjom B.    schedule 16.06.2015


Ответы (1)


Дочерний процесс запускается в отдельном процессе

Вы должны передавать переменные среды во время вызова «exec» https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

var exec = require('child_process').exec;

exec('casperjs child.js', {
    env: {
        'PATH': '<your path locations with path delimiter>'
    }
},

Пример пути для окон

c:\\phantomjs\\bin;c:\\casperjs\\bin;C:\\Users\\<username>\\AppData\\Roaming\\npm\\;C:\\Program Files\\nodejs

Двойная косая черта \\ используется для экранирования внутри строки

Пример пути для линукса

/opt/node:/opt/phantomjs/bin:/opt/casperjs/bin

/opt/node требуется только в том случае, если вы установили его в произвольное место. Поскольку узел по умолчанию будет идти по умолчанию, видимый PATH

В противном случае добавьте переменные среды в /etc/profile.

См. Как установить переменную среды для всех под моей Linux-система?

person Dickens A S    schedule 15.06.2015
comment
stderr: /bin/sh: casperjs: команда не найдена; ошибка exec: Ошибка: сбой команды: /bin/sh: casperjs: команда не найдена - person Senju; 15.06.2015
comment
в противном случае попробуйте добавить путь к bin casperjs в общесистемные переменные среды внутри /etc/profile с помощью команды экспорта - person Dickens A S; 15.06.2015