如何判断c ++程序何时等待输入?

时间:2010-11-16 18:55:16

标签: c++ python cout cin

我正试图通过python控制一个简单的c ++程序。该程序通过提示用户输入来工作。提示不一定是endl终止。我想知道的是,如果有一种方法可以告诉python 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 ++方面进行缓冲,但似乎没有帮助)

感谢您的回复。

2 个答案:

答案 0 :(得分:6)

我不知道有足够的通用范例来检测远程端正在等待输入。我可以想到基本的方法,也可以想到它们会失败的情况。例子:

  1. 使用非阻塞管道/套接字读取,直到没有输入到达:响应可能会被写入磁盘的进程中断,等待数据库的回复等。
  2. 等待进程变为空闲:后台线程可能仍在运行。
  3. 您必须了解您尝试控制的应用程序使用的协议。从某种意义上说,您将为该过程设计一个解释器pexpect是基于这个想法的Python工具集。

答案 1 :(得分:3)

查看pexpect