受け入れられた回答が示唆するようにstdoutとstderrをリダイレクトしない限り、これはexecSyncまたはspawnSyncでは不可能です。stdoutとstderrをリダイレクトせずに、これらのコマンドはコマンドが完了したときにのみstdoutとstderrを返します。
stdoutとstderrをリダイレクトせずにこれを行うには、spawnを使用してこれを行う必要がありますが、非常に簡単です。
var spawn = require('child_process').spawn;
//kick off process of listing files
var child = spawn('ls', ['-l', '/']);
//spit stdout to screen
child.stdout.on('data', function (data) { process.stdout.write(data.toString()); });
//spit stderr to screen
child.stderr.on('data', function (data) { process.stdout.write(data.toString()); });
child.on('close', function (code) {
console.log("Finished with code " + code);
});
ファイルを再帰的に一覧表示するlsコマンドを使用したので、すばやくテストできます。Spawnは最初の引数として、実行しようとしている実行可能ファイルの名前を受け取り、2番目の引数として、その実行可能ファイルに渡したい各パラメーターを表す文字列の配列を受け取ります。
ただし、execSyncを使用するように設定されていて、何らかの理由でstdoutまたはstderrをリダイレクトできない場合は、xtermなどの別の端末を開いて、次のようなコマンドを渡すことができます。
var execSync = require('child_process').execSync;
execSync("xterm -title RecursiveFileListing -e ls -latkR /");
これにより、新しい端末でのコマンドの動作を確認できますが、同期呼び出しは引き続き可能です。