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
Susan Sarandonasal
2024-11-17 19:20:02943semak imbas

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!

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