Node.js 节点child.exec正在工作,但child.spawn未工作

Node.js 节点child.exec正在工作,但child.spawn未工作,node.js,child-process,Node.js,Child Process,我正在尝试使用childspawn(不工作)而不是Exec(工作)。我的Exec代码为我提供了控制台输出,如果我运行我的子生成代码,我什么也看不到,如何使用子生成获得控制台输出: 这是我的工作执行代码: var exec = require('child_process').exec, child; child = exec('myProgram --version', {}, function (error, stdout, stderr) {

我正在尝试使用childspawn(不工作)而不是Exec(工作)。我的Exec代码为我提供了控制台输出,如果我运行我的子生成代码,我什么也看不到,如何使用子生成获得控制台输出:

这是我的工作执行代码:

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

   child = exec('myProgram --version', {},
   function (error, stdout, stderr) {
       console.log('stdout: ' + stdout);
       console.log('stderr: ' + stderr);
       if (error !== null) {
           console.log('exec error: ' + error);
       }
   });

   child.stdout.on('data', function(data) {
       console.log(data.toString()); 
   });

   child.stderr.on('data', function (data) {
       console.log('stderr: ' + data);
   });
以下是我在使用spawn时的非工作尝试:

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

   var spawnchild = spawn('myProgram', ['--version']);

   spawnchild.stdout.on('data', function(data) {
       console.log('stdout: ' + data);
   });
   spawnchild.stderr.on('data', function(data) {
       console.log('stdout: ' + data);
   });

如果为
spawnchild
添加“关闭”事件处理程序,您将看到非零退出代码。原因是
spawn()
的第一个参数不同于
exec()
的第一个参数
exec()
接受完整的命令行字符串,而
spawn()
只有第一个参数的程序名/路径,第二个参数是传递给该程序的命令行参数数组

因此,在您的特定情况下,您可以使用:

var spawnchild = spawn('myProgram', ['--version']);

下一次,如果某个问题没有如您所期望的那样工作,我建议您在寻求帮助之前查看文档并确定您的语法正确。编辑您的问题,您只是使您的问题的唯一答案无效。这样做是不好的做法。你的编辑真的反映了你的问题吗?也就是说,即使在更新的问题中使用代码时,您是否也有此问题?是的,它确实反映了问题,我在exec代码上获得控制台输出,但我没有在spawn上使用更新的问题中的代码,这是我试图获得帮助的问题。确定。然后根据文档,您的代码应该可以工作..我做了这个更改,并更新了我的原始问题以包含它。但是,这并没有回答我的问题,因为当我通过spawn运行时,仍然没有记录的输出,而如果我使用exec,则会有记录的输出。您是否通过添加“close”事件处理程序并检查传递给它的参数来验证退出代码是否为非零?我忽略了此代码,因为我认为它与此无关,但我一直都有此代码,它也不提供控制台日志:spawnchild.on('close',function(code){console.log('closing code:'+code);});这可能意味着该过程没有退出。出于好奇,您使用的是什么节点版本?node-v return v0.12.7,我查看了节点网站上的版本4+,5+,我运行的可能是一个古老的版本吗?我现在正在安装nvm,看看是否可以更新。