1

Windows マシンのノード プロセスにいくつかのコマンドを出力する必要があります。

cmd.exe 子プロセスを作成し、それと対話しようとしています。複数の相互に信頼できるコマンド (PATH、現在のディレクトリを使用) を実行する必要があるため、cmd.exe を開いたままにしておく必要があります。

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);

問題は、この出力を取得する代わりに、

標準出力: 午後 6 時 5 分

私はこれを取得しています、

標準出力: TIME /T
標準出力: 午後 6 時 23 分

子の標準入力に書き込んだコマンド「TIME / T」が、どういうわけかその標準出力に書き込まれています。

コマンドプロンプトでこれを行うと

TIME /T > a.txt

「06:23 PM」のみがa.txtに保存されるため、cmd.exeのstdoutは正常に機能しています。問題は私のnodejsコードにあると思います。

私はどこで間違っていますか?スポーン引数に変更はありますか?

exec() を使用する場合、子プロセス間で状態 (env、cwd など) を維持する方法はありますか?

他の提案はありますか?助けてください。

4

0 に答える 0