Saya ingin menggunakan execSync
metode yang ditambahkan di NodeJS 0.12 tetapi masih memiliki output di jendela konsol dari mana saya menjalankan skrip Node.
Misalnya jika saya menjalankan skrip NodeJS yang memiliki baris berikut saya ingin melihat hasil lengkap dari perintah rsync "live" di dalam konsol:
require('child_process').execSync('rsync -avAXz --info=progress2 "/src" "/dest"');
Saya mengerti bahwa execSync
mengembalikan ouput dari perintah dan bahwa saya dapat mencetaknya ke konsol setelah eksekusi tetapi dengan cara ini saya tidak memiliki output "hidup" ...
node.js
child-process
suamikim
sumber
sumber
[0,1,2]
saya telah menggunakan'inherit'
, yang setara dengan[process.stdin, process.stdout, process.stderr]
atau[0,1,2]
sesuai dokumenoptions.stdio
dokumentasi: nodejs.org/api/child_process.html#child_process_options_options_stdio{stdio:'inherit'}
, Anda harus menambahkan .toString () dan kemudian memanggil console.log secara manual dengan hasilnya. Selain itu, bahkan tidak memenuhi persyaratan pertanyaan untuk melihat output perintah "hidup". Saya tidak berpikir itu "jauh lebih sederhana", pada kenyataannya saya tidak berpikir itu lebih sederhana sama sekali.Anda cukup menggunakan
.toString()
.Ini telah diuji pada Node
v8.5.0
, saya tidak yakin tentang versi sebelumnya. Menurut @etov , itu tidak berfungsiv6.3.1
- Saya tidak yakin tentang di antaranya.sumber
.execSync()
melemparError
instance.Kecuali Anda mengarahkan ulang stdout dan stderr seperti jawaban yang diterima menyarankan, ini tidak mungkin dengan execSync atau spawnSync. Tanpa mengarahkan stdout dan stderr, perintah-perintah itu hanya mengembalikan stdout dan stderr ketika perintah selesai.
Untuk melakukan ini tanpa mengarahkan ulang stdout dan stderr, Anda harus menggunakan spawn untuk melakukan ini, tetapi ini cukup mudah:
Saya menggunakan perintah ls yang secara rekursif mendaftar file sehingga Anda dapat mengujinya dengan cepat. Spawn mengambil sebagai argumen pertama nama yang dapat dieksekusi yang Anda coba jalankan dan karena argumen kedua dibutuhkan array string yang mewakili setiap parameter yang ingin Anda sampaikan ke executable itu.
Namun, jika Anda menggunakan execSync dan tidak dapat mengalihkan stdout atau stderr karena suatu alasan, Anda dapat membuka terminal lain seperti xterm dan memberikannya perintah seperti ini:
Ini akan memungkinkan Anda untuk melihat apa perintah Anda lakukan di terminal baru tetapi masih memiliki panggilan sinkron.
sumber