gpt4 book ai didi

c++ - 监控正在运行的 qprocess 并在 qprocess 完成时返回值

转载 作者:行者123 更新时间:2023-11-28 05:27:27 25 4
gpt4 key购买 nike

我想运行一个 qprocess(程序 adb),当该过程完成时将结果返回给调用函数。但是,adb 很有可能会发现自己陷入循环,将诸如“ADB 服务器未确认”之类的错误消息打印到标准输出,而永远不会完成。我需要捕获这些错误。

   QProcess run_command;
connect(&run_command,SIGNAL(readyReadStandardOutput()),this,SLOT( dolog() ));
QString result=RunProcess("adb connect 192.168.1.100");

...

QString MainWindow::RunProcess(QString cstring)
{

run_command.start(cstring);

// keep gui active for lengthy processes.

while(run_command.state() != QProcess::NotRunning)
qApp->processEvents();

QString command=run_command.readAll();
return command; // returns nothing if slot is enabled.
}

void MainWindow::dolog()
{
QString logstring = run_command.readAllStandardOutput();
if (logstring.contains("error condition")
logfile("Logfile:"+logstring);

}

如果我启用信号/槽,dolog() 会将标准输出打印到日志文件,但 RunProcess 返回空字符串。如果我禁用信号/槽,RunProcess() 会按预期返回 qprocess 输出。

最佳答案

首先,您需要确定所讨论的命令使用哪个输出流来处理错误。它与 stderr 非常相似,因此您需要连接到 readyReadStandardError() 信号。

对于命令本身,我建议将其拆分为命令和参数,并使用接受命令和参数列表的QProcess::start() 重载。只是比依赖再次正确分隔的单个字符串更可靠。

关于c++ - 监控正在运行的 qprocess 并在 qprocess 完成时返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40249757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com