我需要将一些命令输出到 Windows 机器上的节点进程。
我正在创建 cmd.exe 子进程并尝试与之交互。我需要 cmd.exe 保持打开状态,因为我有多个相互依赖的命令(使用 PATH、当前目录)来运行。
var spawn = require('child_process').spawn,
child = spawn('cmd.exe', ['/K']);
// '/K' is passed to avoid cmd.exe startup message
// @ECHO OFF in CMD.exe
child.stdin.write('@ECHO OFF\r\n');
child.stdout.on('data', function (data) {
// @ECHO OFF reply (do nothing)
});
setTimeout(function () { // after 1 sec
// remove prev stdout listener
child.stdout.removeAllListeners('data');
// new stdout listener
child.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
// give input
child.stdin.write('TIME /T\r\n');
}, 1000);
问题是,而不是得到这个输出,
标准输出:下午 06:05
我得到这个,
标准输出:时间/T 标准输出:下午 06:23
我写到孩子的标准输入的命令“TIME / T”以某种方式被写入它的标准输出。
如果我在命令提示符下这样做
时间 /T > a.txt
只有“06:23 PM”存储在 a.txt 中,所以 cmd.exe 的标准输出工作正常。我想问题出在我的 nodejs 代码中。
我在哪里做错了?生成参数有什么变化吗?
如果我使用 exec(),有没有办法在子进程之间维护状态(env、cwd 等)?
还有其他建议吗?请帮忙。