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!