Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapakah Subproses Python Saya Menggantung Semasa Membaca Output Program C?

Mengapakah Subproses Python Saya Menggantung Semasa Membaca Output Program C?

Susan Sarandon
Lepaskan: 2024-11-17 19:20:02
asal
941 orang telah melayarinya

Why Does My Python Subprocess Hang When Reading C Program Output?

Subproses program Python C digantung pada ""for line in iter""

Anda cuba membaca output daripada program C menggunakan subprocess.Popen dalam Python, tetapi prosesnya tergantung pada baris "untuk baris dalam iter(process.stdout.readline, '')". Ini ialah isu yang diketahui dengan subproses dan ia disebabkan oleh penimbalan strim stdout.

Betulkan penimbal stdout dalam program C secara langsung

Strim stdout ditimbal oleh lalai. Ini bermakna program C tidak akan menghantar sebarang output ke paip sehingga penimbal penuh. Untuk membetulkannya, anda boleh menggunakan fungsi setvbuf untuk menetapkan aliran stdout kepada baris buffer. Ini akan menyebabkan program C menghantar output ke paip serta-merta selepas setiap baris ditulis.

Atau gunakan pseudo-TTY

Pilihan lain ialah menggunakan pseudo- TTY (peranti terminal) untuk berkomunikasi dengan program C. Ini akan membolehkan program C menghantar output ke paip dengan serta-merta, walaupun aliran stdout ditimbal.

Atau betulkan tanpa mengubah suai sumber program C

Akhir sekali, anda boleh menggunakan utiliti stdbuf untuk menukar jenis penimbalan tanpa mengubah suai kod sumber program C. Utiliti ini akan membolehkan anda memaksa program C menghantar output ke paip dengan serta-merta, walaupun aliran stdout ditimbal.

Atas ialah kandungan terperinci Mengapakah Subproses Python Saya Menggantung Semasa Membaca Output Program C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan