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);
}
我希望 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);
}