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 など) を維持する方法はありますか?
他の提案はありますか?助けてください。