Trừ khi bạn chuyển hướng thiết bị xuất chuẩn và thiết bị xuất chuẩn như câu trả lời được chấp nhận cho thấy, điều này là không thể với execSync hoặc spawnSync. Không chuyển hướng stdout và stderr, các lệnh đó chỉ trả về stdout và stderr khi lệnh được hoàn thành.
Để làm điều này mà không chuyển hướng thiết bị xuất chuẩn và thiết bị xuất chuẩn, bạn sẽ cần sử dụng sinh sản để làm điều này nhưng nó khá đơn giản:
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);
});
Tôi đã sử dụng lệnh ls liệt kê đệ quy các tệp để bạn có thể kiểm tra nhanh. Spawn lấy đối số đầu tiên là tên thực thi mà bạn đang cố chạy và là đối số thứ hai, nó lấy một chuỗi các chuỗi đại diện cho mỗi tham số bạn muốn truyền cho tệp thực thi đó.
Tuy nhiên, nếu bạn được thiết lập bằng cách sử dụng execSync và không thể chuyển hướng thiết bị xuất chuẩn hoặc thiết bị xuất chuẩn vì một số lý do, bạn có thể mở một thiết bị đầu cuối khác như xterm và truyền cho nó một lệnh như vậy:
var execSync = require('child_process').execSync;
execSync("xterm -title RecursiveFileListing -e ls -latkR /");
Điều này sẽ cho phép bạn xem lệnh của bạn đang làm gì trong thiết bị đầu cuối mới nhưng vẫn có cuộc gọi đồng bộ.