我想通过python控制一个简单的C++程序。该程序通过提示用户输入来工作。提示不一定以endl结尾。我想知道的是,如果有一种方法可以告诉python C++程序不再生成输出并切换到请求输入。 下面是一个简单的例子:如何判断C++程序何时等待输入?
C++
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "Enter a number ";
cin >> x;
cout << x << " squared = " << x * x << endl;
}
蟒蛇:
#! /usr/bin/python
import subprocess, sys
dproc = subprocess.Popen('./y', stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while (True) :
dout = dproc.stdout.read(1)
sys.stdout.write(dout)
dproc.stdin.write("22\n")
这类作品,但写入dproc.stdin太多。我正在寻找的是一种方法来读取从dproc.stdout 到的所有内容,程序已准备好输入,然后写入dproc.stdout。
如果可能,我想这样做而不用修改C++代码。 (不过,我曾尝试使用C++侧缓冲播放,但它似乎并没有帮助)
谢谢你的任何回应。
我看着pexpect。通过读取C++程序生成的输出并解析该数据,pexpect功能看起来可行。我可能最终会这样做,但我一直在寻找更通用的东西,即使您不知道C++程序将生成什么输出,也可以工作。 – 2010-11-16 19:16:24
无法知道程序是否在等待输入;不幸的是,管道不提供这种功能。 – kindall 2010-11-16 19:19:17
@Dave:如果进程使用'select()'来确定答案的可用性(即“主动等待”),那么在等待输入时它不会阻塞。这可能就是为什么管道首先不提供该功能的原因。 – 2010-11-16 19:23:39