nodejs child_process.spawn cmd.exe stdin出现在stdout中

时间:2013-10-02 12:59:39

标签: node.js stdout stdin stdio child-process

我需要将一些命令输出到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等)?

还有其他建议吗?请帮助。

0 个答案:

没有答案