【发布时间】:2015-08-25 10:14:06
【问题描述】:
我有一个应用程序(我没有源代码),它将其输出打印到控制台。我正在将其输出写入文件,例如;
./otherApp > out.txt
使用 c++ qt 编程,我正在编写一个应用程序,该应用程序还应该同时读取其输出。但是我的代码只是读取创建的 out.txt 文件。我的意思是当 otherApp 继续写入输出时,如果我的项目完成读取,它不会读取输出文件的其余部分。
这是使用 QTextStream 读取输出的常用方法。
QString fileName = "/.1/Work/appOutput/out1";
QFile inputFile(fileName);
if(inputFile.open(QIODevice::ReadOnly))
{
QTextStream in(&inputFile);
while(!in.atEnd())
{
QString line = in.readLine();
qDebug() << line;
}
inputFile.close();
}
我的问题是如何在我关闭 otherApp 或在其中没有写入任何内容之后读出文本文件?
编辑:
感谢@Bowdzone,我更改了我的代码并且它正在工作。这是我的代码。
QString program = "/.1/Work/otherApp";
QStringList arguments;
arguments << "-x" << "1002";
QProcess *myProcess = new QProcess();
myProcess->start(program, arguments);
QString strOut = myProcess->readAllStandardOutput();
qDebug() << QTime::currentTime().toString() << strOut;
myProcess->waitForFinished();
但是,一旦应用程序登录,qDebug() 就不会显示 otherApp 的输出。看起来不应该放置myProcess->waitForFinished(),因为一旦应用程序启动它就会创建另一个进程,并且我在 Qt 项目中看不到日志。您能帮我如何同时查看日志吗?
【问题讨论】:
-
您可以使用QProcess 从您的应用程序中启动另一个应用程序,并使用其方法直接读取输出,而不必使用文本文件。
-
@Bowdzone 你能给我小样本更清楚吗?
-
这一切都在文档中。 Here 它向您展示了如何使用
QProcess启动外部程序。然后,每当程序向标准输出写入内容时,它就会发出readyReadStandardOutput()信号,您可以使用readAllStandardOutput()读取该信号 -
@Bowdzone 你能看看我的最新编辑吗