启动 QProcess 并一次读取一行输出

Starting QProcess and reading its output one line at a time

本文关键字:输出 一行 读取 QProcess 启动 一次      更新时间:2023-10-16

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;
}