Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencapai Output Masa Nyata daripada Subproses dalam Python?

Bagaimana untuk Mencapai Output Masa Nyata daripada Subproses dalam Python?

Barbara Streisand
Barbara Streisandasal
2024-11-14 16:17:02442semak imbas

How to Achieve Real-Time Output from Subprocess in Python?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn