使用 QProcess,是否有必要在 waitForFinished 之后调用 waitForReadyRead?
With QProcess, Is it necessary to call waitForReadyRead after waitForFinished?
我使用下面的代码从命令行实用程序的标准输出中捕获 'help'。这段代码一直没有问题,直到今天早上有人遇到问题(出现的消息框表明该命令看起来很奇怪)。
我似乎无法重现该问题,因此我将其归因于系统异常,因为该实用程序位于网络共享驱动器上,而且我们的系统负担着安全进程,导致很多滞后。
添加 waitForReadyRead
检查是否有益,还是多余?
如有任何想法或建议,我们将不胜感激。
QProcess cmd_process;
cmd_process.setWorkingDirectory("x:/working/directory");
cmd_process.start(R"(t:\bin\win\cmdlineutility.exe)", QStringList() << "/help");
if(cmd_process.waitForFinished())
{
// TODO - should waitForReadyRead() go here?
QByteArray ba = cmd_process.readAll();
if(ba.contains("something good"))
{
// do stuff here
}
else
{
QMessageBox::information(0, "Something wrong", "cmdlineutility looks odd");
}
}
else
{
QMessageBox::information(0, "something wrong", "total fail");
}
至少在 qprocess_win.cpp
两个
QProcessPrivate::waitForReadyRead(int msecs)
and QProcessPrivate::waitForFinished(int msecs)
执行相同的操作:
通话
stdoutChannel.reader && stdoutChannel.reader->waitForReadyRead(0)
完成后调用
drainOutputPipes()
所以当waitForFinished()
returns时,所有可用数据都将被读入输出缓冲区。
我使用下面的代码从命令行实用程序的标准输出中捕获 'help'。这段代码一直没有问题,直到今天早上有人遇到问题(出现的消息框表明该命令看起来很奇怪)。
我似乎无法重现该问题,因此我将其归因于系统异常,因为该实用程序位于网络共享驱动器上,而且我们的系统负担着安全进程,导致很多滞后。
添加 waitForReadyRead
检查是否有益,还是多余?
如有任何想法或建议,我们将不胜感激。
QProcess cmd_process;
cmd_process.setWorkingDirectory("x:/working/directory");
cmd_process.start(R"(t:\bin\win\cmdlineutility.exe)", QStringList() << "/help");
if(cmd_process.waitForFinished())
{
// TODO - should waitForReadyRead() go here?
QByteArray ba = cmd_process.readAll();
if(ba.contains("something good"))
{
// do stuff here
}
else
{
QMessageBox::information(0, "Something wrong", "cmdlineutility looks odd");
}
}
else
{
QMessageBox::information(0, "something wrong", "total fail");
}
至少在 qprocess_win.cpp
两个
QProcessPrivate::waitForReadyRead(int msecs)
and QProcessPrivate::waitForFinished(int msecs)
执行相同的操作:
通话
stdoutChannel.reader && stdoutChannel.reader->waitForReadyRead(0)
完成后调用
drainOutputPipes()
所以当waitForFinished()
returns时,所有可用数据都将被读入输出缓冲区。