Python Popen输出到一个c程序,fget循环读取同一个stdin

Python Popen output to a c program, fget read the same stdin in a loop

我希望 c 程序打印接收到的 3 行。但是结果是c程序不停地打印from c program:33333333。不知道为什么fgets()执行后没有消耗stdin

# pin.py
from subprocess import Popen, PIPE
p = Popen("/home/jchn/pstdin",stdin=PIPE,stdout=None)
p.stdin.write("11111111")
p.stdin.write("22222222")
p.stdin.write("33333333")

pstdin.c

的内容
# pstdin.c
#include <stdio.h>

int main(){
    char a[10];
    FILE* fd = fopen("output","w");
    while (1){  
        fgets(a,10,stdin);
        printf("--from c program--:%s",a);
    }

}

while(1)是无限循环,你没有停止条件

while(fgets(a,10,stdin) != NULL)
{
  printf("--from c program--:%s",a);
}

因为你没有停止条件,fgets() 读取失败但是 a 数组仍然包含最后一个字符串,即 "33333333" 所以它继续打印那个。

当没有什么可读的时候,fgets() returns NULL,所以你可以检查一下 Gopi 已经提到的。

所以如果你这样做,你的 c 程序会 运行 没问题

# pstdin.c
#include <stdio.h>

int main(){
    char a[10];
    FILE* fd = fopen("output","w");
    if (fd == NULL)
        return -1; /* check this before accessing the file please */
    while (fgets(a, 10, stdin))
        printf("--from c program--:%s",a);
}