Qt 中读取子进程输出的首选方式是什么?
我尝试将 QProcess 信号 readyReadStandardOutput 连接到调用 QProcess 方法 readLine 的函数。
首选方式是异步方式,使用由QIODevice
. 你的方法是正确的。确保您阅读了插槽中的所有可用行:
process->setReadChannel(QProcess::StandardOutput);
while (process->canReadLine()) {
QString line = QString::fromLocal8bit(process->readLine());
...
}
还要记住,一旦您阅读了某些内容,就无法再次阅读。QIODevice
的信号需要小心使用 - 您不能将任意数量的消费者连接到readyRead
信号并在每个消费者中执行读取。它不会像您预期的那样工作。如果第一个读取器读取了所有数据,则后续读取器将无法再次读取它。
可能的实现:
QProcess proc;
proc.start("/usr/bin/tegrastats");
QString line;
while(proc.waitForReadyRead())
{
line = QString::fromUtf8(proc.readLine());
qDebug() << line;
}