gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:55:28 24 4
gpt4 key购买 nike

我想使用 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 的输出不是到标准输出(因此我永远无法通过监听标准输出来获取数据),但我不知道从命令行运行时它如何打印日志。

任何帮助将不胜感激。

最佳答案

在 Unix 类型操作系统(Unix、Linux、macOS)上 child_process.execFile() 可以更高效,因为它不会生成 shell。然而,在 Windows 上,.bat 和 .cmd 文件在没有终端的情况下无法自行执行,因此无法使用 child_process.execFile() 启动。在 Windows 上运行时,可以使用设置了 shell 选项的 child_process.spawn() 和 child_process.exec() 来调用 .bat 和 .cmd 文件,或者通过生成 cmd.exe 并将 .bat 或 .cmd 文件作为参数传递(这就是 shell 选项和 child_process.exec() 的作用)。无论如何,如果脚本文件名包含空格,则需要用引号引起来。

// 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}`);
});

关于Node.js 子进程无法捕获 Windows exe 文件的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48146751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com