节点 child.exec 工作但 child.spawn 不工作

Node child.exec working but child.spawn not

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

这是我的工作执行代码:

   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 添加 'close' 事件处理程序,您将看到一个非零退出代码。原因是 spawn() 的第一个参数不同于 exec() 的第一个参数。 exec() 接受完整的命令行字符串,而 spawn() 只有程序 name/path 作为第一个参数,第二个参数是传递给该程序的命令行参数数组。

所以在你的特定情况下,你会使用:

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