我需要将一些命令输出到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);
问题是,而不是获得此输出,
stdout: 06:05 PM
我收到了这个,
stdout: TIME /T stdout: 06:23 PM
我写给孩子的stdin的命令“TIME / T”以某种方式写入了它的标准输出。
如果我在命令提示符下执行此操作
TIME /T > a.txt
只有“06:23 PM”存储在a.txt中,所以cmd.exe的stdout工作正常。我想问题出在我的nodejs代码中。
我在哪里做错了?生成参数的任何变化?
如果我使用exec(),有没有办法在子进程之间维护状态(env,cwd等)?
还有其他建议吗?请帮助。