为什么从 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__
方法解决了这个问题。
我有一个 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__
方法解决了这个问题。