gpt4 book ai didi

c++ - 使用 QProcess 读取标准输出

转载 作者:太空宇宙 更新时间:2023-11-04 12:10:52 27 4
gpt4 key购买 nike

在我的 QT 小部件应用程序中,我试图运行一个 shellscript 来打开一个 C++ 程序并为该程序提供输入。该程序启动一个命令提示符,需要用户输入才能启动。程序启动后,程序的输出将通过标准输出重定向到文本文件。我正在尝试使用 QProcess 打开并运行此 shellscript,然后读取用于将 C++ 程序的结果打印到文本文件的标准输出。 shell脚本只运行这个进程,并不终止它。这是因为我需要在程序运行时不断地将此输出读入 GUI。等到程序完成后再读取此信息是不够的。我对 QT 和 C++ 编程还很陌生。我希望有人可以帮助我实现这一点。

QProcess process;
process.start("/home/pi/Desktop/ShellScripts/RunTutorial3.sh");
QString output =process.readAllStandardOutput();
qDebug() << output;
QString err = process.readAllStandardError();
qDebug() << err;

我尝试过使用其他读取函数(例如 readline),并尝试将进程作为分离进程启动。我的任何实验都没有成功。是否有可能做我在 QT 中尝试的事情。我只需要程序连续运行并让 QT 每隔一段时间读取此输出。

shell 脚本:

#!/bin/bash
cd
cd Desktop
cd tutorial3App
cd bin
echo "start" | ./tutorial3

C++ 代码:我需要在标准输出中捕获 meanTOE 值,以便在我的 GUI 中使用。

/ Calculate average time to end of discharge
double meanToE = std::accumulate(ToESamples.begin(), ToESamples.end(), 0.0)/ToESamples.size();
file << ": EOL in " << meanToE << " s" << std::endl;

最佳答案

正如我在评论中所说,主要问题之一是当您运行 tutorial3 时,该过程是分开的,因此您无法获得输出。所以,我建议直接执行,QProcess可能是一个局部变量,打印空文本后消除,一个可能的解决方案是创建一个指针。另一个改进是使用 readyReadStandardOutput 和 readyReadStandardError 信号,因为印象不是自动的。

QProcess *process = new QProcess(this);

connect(process, &QProcess::readyReadStandardOutput, [process, this](){
QString output =process->readAllStandardOutput();
qDebug() << "output: "<< output;
});

connect(process, &QProcess::readyReadStandardError, [process](){
QString err = process->readAllStandardError();
qDebug() << "error: "<<err;
});

process->setWorkingDirectory("/home/pi/Desktop/tutorial3App/bin/")
process->start("tutorial3", QStringList() << "start");

关于c++ - 使用 QProcess 读取标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49058051/

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