C サブプロセスに大量のデータを非常に高速に書き込むと、Broken Pipe エラーが発生します。
だから私はpythonスクリプトからacサブプロセスを実行しています:
process = subprocess.Popen("./gpiopwm", stdin=subprocess.PIPE)
while True:
process.stdin.write("m2000\n")
print "bytes written"
gpiopwm.c のメイン ループのセクション:
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
逆参照引数が含まれないように行を更新しましたが、パイプの破損エラーがまだ発生しています。
EDIT:
input
として初期化されますchar *input="m2000";