【问题标题】:Child Process - Node.js with CasperJs: How to include arguments?子进程 - 带有 CasperJs 的 Node.js:如何包含参数?
【发布时间】:2026-02-21 12:40:02
【问题描述】:

我尝试使用参数设置 NodeJS 子进程。如果我用 node 运行子进程,它工作正常,但如果我用 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);
    }
});

child.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运行子进程时不能使用参数?

【问题讨论】:

  • PhantomJS(和 CasperJS)没有全局 process 属性。
  • @ArtjomB。所以它根本不起作用?
  • 至少不是这样。在 PhantomJS 中,您需要使用“system”并使用 system.env。只需比较 PhantomJS 和 node 之间的 API。

标签: javascript node.js arguments casperjs child-process


【解决方案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>'
    }
},

windows 的示例路径

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

双斜杠\\用于在字符串中转义

linux的示例路径

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

/opt/node 仅当您安装在自定义位置时才需要。由于默认节点将进入默认可见路径

否则将环境变量添加到/etc/profile

参考How to set environment variable for everyone under my linux system?

【讨论】:

  • stderr: /bin/sh: casperjs: command not found;执行错误:错误:命令失败:/bin/sh:casperjs:找不到命令
  • 否则尝试使用 export 命令将 casperjs bin 路径添加到 /etc/profile 中的系统范围环境变量