我想通過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