我正在嘗試在 C 中生成數字,然后將它們傳遞給 python,并使用 sys.stdin 列印資料。在 C 中生成數字的代碼是這樣的,
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#include <Windows.h>
int main() {
unsigned int i;
srand(time(NULL));
while (1) {
i = random() % 15000;
printf("%u.u", i / 1000, i % 1000);
printf("\n");
usleep(100 * 1000);
}
}
在python中讀取和列印它的程式是這樣的:
import sys
while(1):
for line in sys.stdin:
print(line[:-1])
然后,在我編譯完 c 檔案后gcc gen.c,我將它通過管道傳輸到 python~/a.out | python3 new.py中。但是,這僅在我洗掉 C 代碼中的 usleep 部分時才有效。當我洗掉 usleep 位時,它可以正常作業,但是對于 usleep 部分,它不會列印任何內容,并且它似乎卡在 new.py 的第 4 行。
uj5u.com熱心網友回復:
你只需要重繪 輸出。原因在為什么重定向到檔案時 stdout 需要顯式重繪 ?,即管道改變緩沖行為。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
//#include <Windows.h>
int main() {
unsigned int i;
srand(time(NULL));
while (1) {
i = random() % 15000;
printf("%u.u", i / 1000, i % 1000);
printf("\n");
fflush(stdout);
usleep(1000 * 1000);
}
}
$ gcc gen.c -o gen
$ ./gen | python3 new.py
14.383
0.886
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/474941.html
