Python子进程模块 - 意外行为

时间:2010-06-28 09:07:28

标签: python c subprocess

我需要使用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()调用。为什么在没有任何输入的情况下程序结束?如何解决?

1 个答案:

答案 0 :(得分:3)

每个进程最多只能调用communicate(),因为communicate()等待子进程终止。要重复读取和写入流程的标准流,请使用stdout类的stdinPopen属性。