將大量數據快速寫入C子進程時,出現Broken Pipe錯誤。Python中的C子進程:sub.stdin.write IOError中斷管道
process = subprocess.Popen("./gpiopwm", stdin=subprocess.PIPE)
while True:
process.stdin.write("m2000\n")
print "bytes written"
gpiopwm.c的主迴路的Sectio:
所以我從一個Python腳本運行AC子
printf("1\n");
while (1) {
fgets(input,7,stdin); // Takes input from python script
printf("2\n");
numbers = input+1; // stores all but first char of input
char first = input[0]; // stores first char of input
if (first=='m') {
printf("3\n");
printf("%s\n",numbers);
}
}
然而,從這個輸出如下:
1
bytes written
Traceback (most recent call last):
File "serial-receive-to-pwm.py", line 20, in <module>
process.stdin.write("m2000\n")
IOError: [Errno 32] Broken pipe
該C程序明顯突破fgets
行,如2
從不打印。 我做錯了什麼?我怎樣才能避免這種情況?
編輯: 我已更新fgets
行,以便它不包括取消引用參數,但仍然收到損壞的管道錯誤。
編輯:如果您嘗試從控制檯上運行你的C程序 input
被初始化爲char *input="m2000";
請顯示'input'的完整聲明(以及可能的初始化)。 –