监视运行qprocess并在qprocess完成时返回值

时间:2016-10-25 21:10:04

标签: c++ qt adb signals-slots qprocess

我想运行一个qprocess(程序adb),当进程完成时,将结果返回给调用函数。但是,adb可能会在循环中找到自己的每一种可能性,打印错误消息,例如“ADB服务器没有确认”到stdout,而不是完成。我需要捕获这些错误。

   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()会将stdout打印到日志文件,但RunProcess返回一个空字符串。如果我禁用信号/槽,RunProcess()会按预期返回qprocess输出。

1 个答案:

答案 0 :(得分:0)

首先,您需要确定有问题的命令正在使用哪个输出流来处理其错误。 它非常像stderr,因此您需要连接到readyReadStandardError()信号。

对于命令本身,我建议将其拆分为命令和参数,并使用带有命令和参数列表的QProcess::start()重载。 比依赖单个字符串再次正确分离更强大。