我想使用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获取数据),但是我不知道从命令行运行时它是如何打印日志的。
非常感谢任何帮助。
答案 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}}