1

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

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

4

0 回答 0