0

运行简单的节点程序时出现此错误:

/home/ubuntu/parent.js:4
    throw error;
      ^
Error: Command failed: /bin/sh: 1: node: not found

at ChildProcess.exithandler (child_process.js:637:15)
at ChildProcess.EventEmitter.emit (events.js:98:17)
at maybeClose (child_process.js:735:16)
at Socket.<anonymous> (child_process.js:948:11)
at Socket.EventEmitter.emit (events.js:95:17)
at Pipe.close (net.js:466:12)

父.js:

 var exec = require('child_process').exec; 
 exec('node child.js',{env: {number: 123}},function(error,stdout,stderr){ 
   if(error){ throw error; } console.log('stdout:\t',stdout); 
   console.log('stderr:\t',stderr); 
 });

child.js:

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

2 回答 2

3

当您通过这些选项时:

{env: {number: 123}}

您正在覆盖所有环境变量,因此它不会继承您当前的环境变量。这包括PATH,它是查找 所必需的node。除了您想要的环境变量之外,您还需要复制当前环境变量:

env = {};
for(key in process.env) {
  env[key] = process.env[key];
}
env.number = 123;

然后您将其env用作env选项:

{env: env}
于 2013-09-20T15:27:18.217 回答
0

因此,您有多个要运行的节点实例。对我来说,这看起来不对。您可以require('child.js')或更好地构建您的应用程序。

如果你真的想这样做,你需要了解路径。父节点应用程序以用户身份运行,一旦由该用户运行,它似乎没有原始节点文件的路径。尝试执行存在的export PATH=$PATH:/usr/local/bin 命令/usr/local/bin/node。如果节点在/bin,则使用它。找到节点可执行文件的位置并将该 bin 目录添加到路径中。这必须在节点运行的用户上完成。

在节点中,您可以通过执行查看可用的 PATH

exec('echo $PATH')

它检查的每个目录都用冒号分隔

最好在节点之外执行此操作,但对我来说,整个情况似乎应该从最初的概念重新考虑。

于 2013-09-20T14:09:08.880 回答