gpt4 book ai didi

c++ - Qt:如何获取正在运行的 QProcess 的实时输出

转载 作者:太空狗 更新时间:2023-10-29 21:15:02 25 4
gpt4 key购买 nike

我必须在 QProcess 运行时获取它的输出。因此我写了下面的代码:

CommandExecutor_C::CommandExecutor_C():
mProcessStatus(AI_UNKNOWN),
mOnTdiActiveCallback(),
mTdiProcess(new QProcess)
{
connect(mTdiProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(CheckOutput()));
connect(mTdiProcess, SIGNAL(readyReadStandardError()), this, SLOT(CheckOutput()));
}

void CommandExecutor_C::ExecuteCommand(QString &aCommand)
{
mTdiProcess->start(aCommand, QProcess::Unbuffered | QProcess::ReadWrite);
LOGINFO(FB_TDI,"Launch command: " + aCommand.toStdString());
}


void CommandExecutor_C::CheckOutput()
{
QString StdOut = QString(mTdiProcess->readAllStandardOutput());
QString StdErr = QString(mTdiProcess->readAllStandardError());

mProcessStatus = CheckTdiAutomationInterface(StdOut.toStdString(), StdErr.toStdString());

if(mProcessStatus != AI_UNKNOWN)
{
OnTdiActive(mProcessStatus);
}
}

如果 QProcess 完成,这工作正常,但在我的情况下,Process 启动一个自动化界面,该界面应永久在后台运行。因此,我使用了“readyReadStandardOutput”并将其连接到插槽 CheckOutput()。 CheckOutput() 仅在流程完成时被调用。否则我将无休止地等待。

我在谷歌上搜索了很多关于这个问题的信息,但没有任何效果。我非常确定输出正在缓冲,并且如果进程完成则返回。因此,我已经在无缓冲模式下启动了进程。我也试过转发 mTdiProcess 的 channel 。这里的代码:

void CommandExecutor_C::ExecuteCommand(QString &aCommand)
{
mTdiProcess->setProcessChannelMode(QProcess::ForwardedChannels);
mTdiProcess->start(aCommand, QProcess::Unbuffered | QProcess::ReadWrite);
LOGINFO(FB_TDI,"Launch command: " + aCommand.toStdString());
}

但没有任何效果。我希望你能帮助我。

如果这很重要,我正在使用 Qt 5.4.2。

最佳答案

我通常像这样定期检查输出:

bool returnBool = false;
while (returnBool == false)
{
/*! Wait one second if the process finishes. Then read all output to
* stdout and stderr and redo. */
returnBool = process.waitForFinished(1000);
QString outputStdOut = process.readAllStandardOutput();
QString outputStdErr = process.readAllStandardError();
}

关于c++ - Qt:如何获取正在运行的 QProcess 的实时输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39095885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com