Следите за выполнением qprocess и возвращайте значение после завершения qprocess

Я хочу запустить qprocess (программа adb) и по окончании процесса вернуть результаты вызывающей функции. Тем не менее, есть все возможности, что adb может оказаться в цикле, печатая сообщения об ошибках, такие как «ADB server not ACK», в 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 () печатает стандартный вывод в лог-файл, но RunProcess возвращает пустую строку. Если я отключаю сигнал / слот, RunProcess () возвращает вывод qprocess, как и ожидалось.

0

Решение

Сначала необходимо определить, какой выходной поток использует рассматриваемая команда для своих ошибок.
Это очень похоже stderr так что вам нужно будет подключиться к readyReadStandardError() сигнал вместо.

Для самой команды я бы рекомендовал разбить ее на команду и аргументы и использовать QProcess::start() перегрузка, которая принимает команду и список аргументов.
Просто более надежно, чем полагаться на то, чтобы одна строка снова была правильно разделена.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector