【发布时间】:2024-09-29 00:10:02
【问题描述】:
我正在开发一个应用程序(在 Qt 5.11 中开发,工具链 MSVS2017 64 位),在某些时候,它必须执行一个 .bat 脚本。此 .bat 脚本将使用适当的 cmd 行参数调用某些程序。脚本和程序将驻留在同一目录中。该程序可能会或可能不会要求用户在最后按 Enter。如果程序要求用户按 Enter,除非在标准输入中写入换行符,否则程序永远不会结束。
我想检查程序是否在尝试写入其标准输入之前等待用户输入,如果可能的话,只使用 Qt 库。
.bat 脚本会简单地调用程序:
Program arg1 arg2 arg3...
从应用程序,脚本将使用 QProcess 执行:
进程开始后添加睡眠
QProcess process;
process.setWorkingDirectory("C:/path/to/script");
process.start("cmd /C C:/path/to/script/script.bat");
QThread::sleep(someTimeout); // give enough time for process to finish
if (/*somehow*/ process.isWaitingForInput())
proces.write("\n");
process.waitForFinished();
process.readAllStandardOutput();
process.readAllStandardInput();
proces.exitCode();
我找到了similar question,答案指向MSDN WaitForInputIdle。
将来可以移植到 Linux 或 Mac,如果可以,我想避免
#if defined(WIN32)
WaitForInputIdle(...)
#else
PosixAlternative(...)
#endif
另外,也许是主题,但我很好奇,是否可以从 QProcess 执行 .bat 脚本,以使 cmd/终端窗口与 std 输出一起显示?
【问题讨论】:
-
你的问题和*.com/questions/6911498/…很不一样
标签: c++ qt stdin qprocess qt5.11