Output Masa Nyata dengan Subproses
Dalam percubaan untuk mencipta skrip pembalut dengan penunjuk kemajuan, anda menghadapi cabaran di mana output daripada pembalut program telah ditimbal walaupun menggunakan subproses.Popen dengan stdout=PIPE. Seperti yang anda dapati, menetapkan bufsize kepada 1 atau 0 mahupun menggunakan gelung output tidak menyelesaikan isu.
Penyelesaian: Menggunakan readline
Nasib baik, kami terjumpa penyelesaian: menggunakan kaedah garis baca paip stdout. Berbeza dengan kaedah gelung for yang anda gunakan pada mulanya, yang menampan secara agresif, manakala gelung True dipertingkatkan dengan garis baca mempamerkan gelagat yang diingini.
sementara True:
line = p.stdout. readline()
jika bukan baris: putus
...
Isu Asas
Isu ini berasal daripada pepijat yang diketahui dalam Python, dijejaki sebagai isu 3907. Punca khusus penimbalan anomali tidak difahami dengan baik.
Kesimpulan
Dengan memanfaatkan kaedah garis baca, anda boleh mencapai output masa nyata daripada program yang dilancarkan melalui subproses tanpa menggunakan teknik lapuk atau berpotensi tidak selamat seperti exec*. Penyelesaian ini kekal berkesan dalam versi Python melebihi 3.x, memastikan keserasian ke hadapan.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Output Masa Nyata daripada Subproses dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!