gpt4 book ai didi

python - 在 Qt 中获取输出 : 'QProcess::start()' and 'QProcess:readAllStandardOutPut()'

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:41:15 24 4
gpt4 key购买 nike

平台:Windows10我使用 QProcess::start 执行 Python 文件(在同一个目录中),但是我 无法从 readAllStandardOutput 函数获取结果。

Python文件代码:

测试.py

print “hello,world”

Qt:

#include <QProcess>
#include <QStringList>
#include <QByteArray>
#include <QDebug>

void fun1(){
QProcess process;
process.start("python test.py");
process.waitForFinished();
QByteArray a = process.readAllStandardOutput();


qDebug()<<a;
}

int main(){
fun1();
}

当我执行test.py时我可以得到输出,但是当我使用readAllStandardOutput时我无法得到它。它只是一个没有数据的打印“”。

#include <QProcess>
#include <QStringList>
#include <QByteArray>
#include <iostream>
#include <QDebug>

void fun2(){
QStringList args("F:/test.py");
QProcess process;
process.execute(QString("Python.exe"), args);
QByteArray a = process.readAllStandardOutput();
process.waitForFinished();
qDebug()<<a;

}

int main(){
fun1();
qDebug<<"--------";
fun2();
}

fun2函数中,函数execute()可以在Qt终端print "hello,world",但是我无法获取带有 readAllStandardOutput 函数的标准输出。 a 也打印 ""没有数据我不知道为什么?

因为我想使用 python 模块“requests”直接访问一个 url,所以我希望我的 C++ 代码可以执行这个 python 文件。所以,如果你有更好的方法,请告诉我。

最佳答案

当使用 QProcess::start() 时,进程在另一个线程中启动并异步执行,以避免阻塞应用程序的 GUI 线程(如果您有 GUI)。使用 waitForReadyRead() 也会阻止应用程序的执行,直到进程结束。

您可以考虑使用 Qt 的信号/槽系统在可用时捕获进程的输出,而不会阻塞主线程。

此版本的 fun1() 需要 C++11:

void fun1(){
// instantiate dynamically to avoid stack unwinding before the process terminates
QProcess* process = new QProcess();

// catch data output
QObject::connect(process, &QProcess::readyRead, [process] () {
QByteArray a = process->readAll();
qDebug() << a;
});

// delete process instance when done, and get the exit status to handle errors.
QObject::connect(process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
[=](int exitCode, QProcess::ExitStatus /*exitStatus*/){
qDebug()<< "process exited with code " << exitCode;
process->deleteLater();
});

// start the process after making signal/slots connections
process->start("python test.py");
}

通过这种方式,您还可以管理执行错误,或者至少让用户知道它。

关于python - 在 Qt 中获取输出 : 'QProcess::start()' and 'QProcess:readAllStandardOutPut()' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49976741/

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