1. ホーム
  2. node.js

[解決済み] child_process.spawn の実行時に色を保持する。

2023-05-11 16:02:11

質問

node.jsでchild_process.spawnを使ってcmd.exeからWindowsのコマンドを実行しようとしています。それは正しく実行されますが、デフォルトのテキスト色で表示されるだけです。どのように色を維持するのでしょうか。それは可能ですか?

var spawn = require('child_process').spawn,
    cmd    = spawn('cmd', ['/s', '/c', 'C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\MSBuild c:\\test.sln']);

cmd.stdout.on('data', function(data){
    process.stdout.write(data);
});

cmd.stderr.on('data', function(data){
    process.stderr.write(data);
});

cmd.on('exit', function(code){
    console.log(code);
});

ノード経由で実行した場合、色は保持されない。

cmd.exe 経由で直接実行した場合、色は保持されます。(これは期待された動作です)。ノード経由で実行したときにこの動作を得るにはどうしたらよいでしょうか。

どのように解決するのですか?

代わりにこれを試してみてください。

var spawn = require('child_process').spawn
  , command = 'C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\MSBuild c:\\test.sln'
  , cmd    = spawn('cmd', ['/s', '/c', command], { customFds: [0,1,2] });

cmd.on('exit', function(code){
    console.log(code);
});

を使うかどうかについては、私は肯定的ではないことに注意してください。 customFds が Windows で動作するかどうかについては肯定的ではありません。古い非推奨の機能で動作しないことは知っていますが [0,1,2] をfdとして渡す場合は、特別なケースがあると思います。

しているのは と同じようなものをここに を行っていますが、このコマンドはUnixマシンでしか実行したことがありません。Windows で動作するかどうか教えてください。