นอกจากว่าคุณเปลี่ยนเส้นทาง stdout และ stderr เป็นคำตอบที่ยอมรับก็ไม่สามารถทำได้ด้วย execSync หรือ spawnSync หากไม่มีการเปลี่ยนทิศทาง stdout และ stderr คำสั่งเหล่านั้นจะส่งคืน stdout และ stderr เมื่อคำสั่งเสร็จสิ้น
ในการทำเช่นนี้โดยไม่เปลี่ยนเส้นทาง stdout และ stderr คุณจะต้องใช้การวางไข่เพื่อทำสิ่งนี้ แต่มันค่อนข้างตรงไปตรงมา:
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 ที่แสดงรายการไฟล์ซ้ำเพื่อให้คุณสามารถทดสอบได้อย่างรวดเร็ว วางไข่เป็นอาร์กิวเมนต์แรกชื่อปฏิบัติการที่คุณพยายามเรียกใช้และเป็นอาร์กิวเมนต์ที่สองจะใช้อาร์เรย์ของสตริงที่เป็นตัวแทนของแต่ละพารามิเตอร์ที่คุณต้องการส่งไปยังปฏิบัติการที่
อย่างไรก็ตามหากคุณตั้งค่าโดยใช้ execSync และไม่สามารถเปลี่ยนเส้นทาง stdout หรือ stderr ด้วยเหตุผลบางอย่างคุณสามารถเปิดเทอร์มินัลอื่นเช่น xterm และส่งคำสั่งให้เช่น:
var execSync = require('child_process').execSync;
execSync("xterm -title RecursiveFileListing -e ls -latkR /");
สิ่งนี้จะช่วยให้คุณเห็นว่าคำสั่งของคุณกำลังทำอะไรในเทอร์มินัลใหม่ แต่ยังมีการโทรแบบซิงโครนัส