Node.js子进程无法捕获windows exe文件的输出

时间:2018-01-08 08:43:55

标签: node.js windows outputstream child-process spawn

我想使用child_process.spawn来执行Windows exe文件并捕获它的输出。

当我使用命令行运行第三方exe文件(表示A.exe)时,它会将一些日志打印到cmd窗口。像这样:

C:\> A.exe
some outputs...
some more outputs...

但是,当我在node.js中生成它时,使用此

import childProcess from 'child_process';

const cp = childProcess.spawn('A.exe');
cp.stdout.on('data', data => console.log(`stdout: ${data}`));
cp.stderr.on('data', data => console.log(`stderr: ${data}`));

根本没有输出。

我认为A.exe的输出不是stdout(因此我无法通过监听stdout获取数据),但是我不知道从命令行运行时它是如何打印日志的。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

也许给这个方法一个:

var childProcess = require('child_process');
childProcess.exec('A.exe', function(error, stdout, stderr) {

    if (error != null) {
        console.log('error occurred: ' + error);
    } else {
        console.log('stdout: ' + stdout);
        console.log('stderr: ' + stderr);
    }
});

// OR
var cp = childProcess.spawn('A.exe');

cp.stdout.on('data', (data) => {
  console.log('stdout: ' + data.toString());
});

cp.stderr.on('data', (data) => {
  console.log('stderr: ' + data.toString());
});

答案 1 :(得分:0)

在Unix类型的操作系统(Unix,Linux,macOS)上child_process.exec()可以更高效,因为它不会产生shell。但是,在Windows上,.bat和.cmd文件在没有终端的情况下不能自行执行,因此无法使用// On Windows Only ... const { spawn } = require('child_process'); const bat = spawn('cmd.exe', ['/c', 'my.bat']); bat.stdout.on('data', (data) => { console.log(data.toString()); }); bat.stderr.on('data', (data) => { console.log(data.toString()); }); bat.on('exit', (code) => { console.log(`Child exited with code ${code}`); }); 启动。在Windows上运行时,可以使用带有var schema = 'sewer_pipelines'; $.getJSON("sql_query.php", // The server URL { parameter: schema }, saveToArray ); 的shell选项设置的child_process.spawn()调用.bat和.cmd文件,或者通过生成cmd.exe并将.bat或.cmd文件作为参数(这是shell选项和child_process.exec()所做的)。在任何情况下,如果脚本文件名包含空格,则需要引用它。

{{1}}