Node memanggil skrip python - Perintah eksekusi aneh
Saya mencoba skrip yang cukup sederhana.
import time
print("Hello World")
time.sleep(5)
Program ini melakukan persis seperti yang tampaknya dilakukannya. Ini mencetak Hello World, menunggu selama lima detik dan kemudian keluar.
Namun, hal-hal mulai menjadi aneh ketika saya memanggil ini dengan node.
const spawn = require('child_process').spawn;
const process = spawn ('python3', ['./testIn.py']);
process.stdout.on('data', data => {
console.log(data.toString());
});
process.on('close', code => {
console.log(`child process close all stdio with code ${code}`);
});
Apa yang terjadi sekarang adalah program menunggu selama lima detik, kemudian mencetak Hello Worlddan kemudian keluar segera setelah pencetakan. Ini seperti urutan dari dua perintah yang dibalik, pertama menjalankan sleep()dan print().
Adakah yang tahu mengapa perilaku aneh ini terjadi?
Jawaban
Python melakukan buffering pada output sehingga Anda tidak akan melihatnya sampai proses selesai. Anda dapat menggunakan -uopsi untuk memberi tahu Python agar tidak melakukan itu. Dari dokumen , -uopsinya akan:
Paksa aliran stdout dan stderr untuk dilepas. Pilihan ini tidak berpengaruh pada aliran stdin.
Berubah pada versi 3.7: Lapisan teks aliran stdout dan stderr sekarang tidak disangga.
Namun, saya menjalankan 3.7.2 di Windows 10 dan tidak dapat membuat kode Anda berfungsi tanpa -uopsi tersebut.
const process = spawn ('py', ['-u', 'testIn.py']);