我怎么知道 QProcess 何时想要读取输入?

Posted

技术标签:

【中文标题】我怎么知道 QProcess 何时想要读取输入?【英文标题】:How can I know when QProcess wants to read input? 【发布时间】:2010-05-08 12:33:37 【问题描述】:

我正在我的 Compilers 类中实现一个编译器,我正在使用 Qt 和 C++。

从源代码生成机器代码后,我正在执行将执行代码的虚拟机。

我这里遇到一个问题,我使用readyRead()信号从虚拟机获取输出,但是我怎么知道虚拟机要从用户那里读取数据呢?

我想在每次机器要求输入时向用户显示一个输入对话框。

【问题讨论】:

【参考方案1】:

实际上,流程的输入流的设计方式并不一定是真实的用户输入。例如,如果您将文件重定向到应用程序的输入,则没有人要求输入的下一部分。在这种情况下,当您调用 std::cin >> a 时,应用程序或操作系统不会生成任何信号,并且 QProcess 无法知道子应用程序正在等待输入。

我的建议是使用一些简单的 IPC,如匿名管道来通知父进程此类事件。如果可能,您可以在子进程标准输出中使用某些特定标记来发送此类通知。

如果您正在运行的虚拟机是第三方应用程序,那么我认为解析其输出以搜索通知用户需要一些输入的内容是唯一的选择。

【讨论】:

以上是关于我怎么知道 QProcess 何时想要读取输入?的主要内容,如果未能解决你的问题,请参考以下文章

使用 QProcess 读取标准输出

如何读取 QProcess 输出

在 Windows 上使用 QProcess 读取 GDAL /vsistdout/

qt怎么查看当前正在执行的代码

Android - 我怎么知道gridview何时到达底部?

QProcess -> 在 Linux 上从 sftp 读取标准输出