Я получаю ошибку Broken Pipe при записи большого количества данных очень быстро в подпроцесс C.Подпроцесс C из Python: sub.stdin.write IOError Broken Pipe
Так я бегу переменного тока подпроцесс из питона сценария:
process = subprocess.Popen("./gpiopwm", stdin=subprocess.PIPE)
while True:
process.stdin.write("m2000\n")
print "bytes written"
Sectio основной петли 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
никогда не печатается. Что я сделал не так? Как я могу избежать этого?
EDIT: Я обновил строку fgets
, чтобы он не включал аргумент разыменования, но я все еще получаю сообщение об ошибке разбитого трубопровода.
EDIT: input
инициализируется как char *input="m2000";
Просьба показать полное объявление (и возможную инициализацию) 'input'. –