我如何判断一个c++;程序正在等待输入? 我试图通过Python控制一个简单的C++程序。该程序通过提示用户输入来工作。提示不一定以endl结尾。我想知道的是,是否有一种方法可以从Python告诉我们C++程序不再生成输出,并切换到请求输入。 下面是一个简单的例子:

我如何判断一个c++;程序正在等待输入? 我试图通过Python控制一个简单的C++程序。该程序通过提示用户输入来工作。提示不一定以endl结尾。我想知道的是,是否有一种方法可以从Python告诉我们C++程序不再生成输出,并切换到请求输入。 下面是一个简单的例子:,c++,python,cout,cin,C++,Python,Cout,Cin,c++ 这种方式可以工作,但写入dproc.stdin的次数太多。相反,我要寻找的是一种从dproc.stdout读取所有内容的方法,直到程序准备好输入,然后写入dproc.stdout 如果可能的话,我想做这个W/O修改C++代码。(但是,我试着在C++侧玩缓冲,但似乎没有帮助) 感谢您的回复。看一看。我不知道有一个足够通用的范例可以检测远程端是否正在等待输入。我能想到基本的方法,但也能想到他们会失败的情况。示例: 使用非阻塞管道/套接字读取,直到没有输入到达:响应可能会被写入磁盘、等待数据库

c++

这种方式可以工作,但写入dproc.stdin的次数太多。相反,我要寻找的是一种从dproc.stdout读取所有内容的方法,直到程序准备好输入,然后写入dproc.stdout

如果可能的话,我想做这个W/O修改C++代码。(但是,我试着在C++侧玩缓冲,但似乎没有帮助)


感谢您的回复。

看一看。

我不知道有一个足够通用的范例可以检测远程端是否正在等待输入。我能想到基本的方法,但也能想到他们会失败的情况。示例:

  • 使用非阻塞管道/套接字读取,直到没有输入到达:响应可能会被写入磁盘、等待数据库答复等过程中断
  • 等待进程变为空闲:后台线程可能仍在运行

  • 您必须了解您试图控制的应用程序所使用的协议。在某种意义上,您将为该过程设计一个解释器。是一个基于此思想的Python工具集。

    我查看了pexpect。pWEY函数看起来是通过读取C++程序生成和解析数据的输出来工作的。我可能会这样做,但我正在寻找一些更通用的,即使你不知道什么样的输出C++程序将生成,也没有办法知道程序是否在等待输入;不幸的是,管道没有提供这种功能。@Dave:如果进程使用
    select()
    来确定答案的可用性(即“活动等待”),它在等待输入时无论如何都不会阻塞。这可能就是管道一开始不提供该功能的原因。谢谢。我担心情况会是这样。不过,在某种程度上,这有点令人惊讶。用户可以这样做-只需查看闪烁的光标提示。如果程序A正在运行程序B,那么A就能够判断B是否在等待输入,这似乎是很自然的,就像人一样。管道的明确设计使得A和B之间有一个缓冲区,这样当A有数据要发送时,它就不会等待B准备好,当B准备好数据时,它不会因为等待A发送而被延迟。因此,您可能会发现,您只需发送数据,接收程序就会在准备接收数据时接受数据(除非它显式刷新其输入缓冲区以消除杂散输入;有些程序会这样做)。
    #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")