为什么从 python 子进程调用程序时 C++ getline() 是非阻塞的?

Why is C++ getline() non-blocking when program is called from python subprocess?

我有一个 C++ 程序,它等待使用 getline() 的一些文本输入,它在命令行中运行良好。

但是,我想从 Python 调用它 - 发送一些文本,获取输出,然后让它等待更多输入。

我尝试使用 subprocess,但在这种情况下 getline() 似乎不等待输入,而是得到一个空行。如果我不断发送输入,它会按预期工作,但一旦我停止这样做,它就会开始读取空字符串。

在 C++ 中添加 if (!input_command.empy()) 是可行的,但是这样程序会消耗大量资源(我想是因为它一直在循环)。

是否可以让 getline() 停止并等待一些实际输入?

C++:

bool ExitProg = FALSE;
do{
    string input_command;
    getline(cin, input_command)
       
    if (input_command == std::string("something")){
        cout << "something" << endl;
    }
    
    if (input_command == std::string("exit")){
        ExitProg = True;
    }
    
} while (!ExitProg)

Python:

process = subprocess.Popen('c_program.exe', stdin=subproces.PIPE, stdout=subprocess.PIPE)
process.stdin.write('something\n')
process.stdin.flush()
print(process.stdout.readline())

更新: 由于以下原因,我假设程序正在读取空行。在 C++ 程序中,我将输入行拆分为一个数组,当 python 代码完成时,我从 C++ 程序中收到关于数组元素不存在的错误。

我创建了一个 class 并将子进程的开始添加到 __init__ 方法中。 class 的方法用于与 C++ 程序交互。然而此时我仍然遇到同样的问题。

我通过添加一个终止子进程的__del__方法解决了这个问题。