我需要使用stdin / stdout将C控制台程序(作为子进程)与Python接口。
C程序更不用了:
tmp = 0.0;
printf("\ninput>>");
scanf_s("%f",&tmp);
printf ("\ninput was: %f",tmp);
tmp = 0.0;
printf("\ninput>>");
scanf_s("%f",&tmp);
printf ("\ninput was: %f",tmp);
tmp = 0.0;
printf("\ninput>>");
scanf_s("%f",&tmp);
printf ("\ninput was: %f",tmp);
使用python子进程模块我需要从这个程序中读取数据,写入内容,然后再读取等等。我使用了以下代码:
>>> p=subprocess.Popen(['C:\T.exe'],stdout=subprocess.PIPE,stdin=subprocess.PIPE)
>>> o,i=communicate('123\n')
o的输出是:
input>>
input was: 123.000000
input>>
input was: 0.000000
input>>
input was: 0.000000
我希望子进程等待输入,直到另一个o,i = communic()调用。为什么在没有任何输入的情况下程序结束?如何解决?
答案 0 :(得分:3)
每个进程最多只能调用communicate()
,因为communicate()
等待子进程终止。要重复读取和写入流程的标准流,请使用stdout
类的stdin
和Popen
属性。