Stdout ve stderr'i kabul edilen yanıtın önerdiği gibi yönlendirmezseniz, execSync veya spawnSync ile bu mümkün değildir. Stdout ve stderr yönlendirilmeden bu komutlar yalnızca komut tamamlandığında stdout ve stderr öğelerini döndürür.
Bunu stdout ve stderr'i yönlendirmeden yapmak için, bunu yapmak için spawn kullanmanız gerekecek, ancak oldukça basit:
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);
});
Hızlı bir şekilde test edebilmeniz için dosyaları özyinelemeli olarak listeleyen bir ls komutu kullandım. Spawn ilk argüman olarak çalıştırmaya çalıştığınız çalıştırılabilir adı alır ve ikinci argüman olarak bu çalıştırılabilir dosyaya aktarmak istediğiniz her parametreyi temsil eden bir dizi dizeyi alır.
Ancak, execSync'i kullanmaya ayarlanmışsanız ve herhangi bir nedenle stdout veya stderr'i yeniden yönlendiremiyorsanız, xterm gibi başka bir terminal açabilir ve buna benzer bir komut iletebilirsiniz:
var execSync = require('child_process').execSync;
execSync("xterm -title RecursiveFileListing -e ls -latkR /");
Bu, komutunuzun yeni terminalde ne yaptığını görmenize izin verir, ancak yine de senkronize çağrıya sahip olursunuz.