Qt调用外部Python脚本
Qt Calling External Python Script
我正在尝试为我用Python编写的命令行工具之一编写GUI包装器。
有人建议我应该使用Qt。
下面是我的项目的。cpp文件:
#include "v_1.h"
#include "ui_v_1.h"
#include<QtCore/QFile>
#include<QtCore/QTextStream>
#include <QProcess>
#include <QPushButton>
v_1::v_1(QWidget *parent) :
QMainWindow(parent),ui(new Ui::v_1)
{
ui->setupUi(this);
}
v_1::~v_1()
{
delete ui;
}
void v_1::on_pushButton_clicked()
{
QProcess p;
p.start("python script -arg1 arg1");
p.waitForFinished(-1);
QString p_stdout = p.readAllStandardOutput();
ui->lineEdit->setText(p_stdout);
}
下面是我的项目头文件:
#ifndef V_1_H
#define V_1_H
#include <QMainWindow>
namespace Ui {
class v_1;
}
class v_1 : public QMainWindow
{
Q_OBJECT
public:
explicit v_1(QWidget *parent = 0);
~v_1();
private slots:
void on_pushButton_clicked();
private:
Ui::v_1 *ui;
};
#endif // V_1_H
UI文件只是一个Push Button和一个LineEdit小部件。
当按钮被点击时,我给它分配了一个插槽。当我调用一些实用程序如ls
或ps
时,on_pushButton_clicked()
方法工作得很好,并且它将这些命令的输出管道到LineEdit小部件,但是当我尝试调用Python脚本时,它没有在LineEdit小部件上显示任何内容。
您试过以下方法吗:
- 确保python在你的系统路径
- 按照文档中的QStringList传递参数 在测试时将readAllStandardOutput更改为readAll
void v_1::on_pushButton_clicked()
{
QProcess p;
QStringList params;
params << "script.py -arg1 arg1";
p.start("python", params);
p.waitForFinished(-1);
QString p_stdout = p.readAll();
ui->lineEdit->setText(p_stdout);
}
Hunor的回答对我也起了作用。但是我没有使用进程ID。我:
void MainWindow::on_pushButton_clicked()
{
QString path = '/Somepath/mypath';
QString command("python");
QStringList params = QStringList() << "script.py";
QProcess *process = new QProcess();
process->startDetached(command, params, path);
process->waitForFinished();
process->close();
}
对于我来说,下面的代码是有效的:
void MainWindow::on_pushButton_clicked()
{
QString path = QCoreApplication::applicationDirPath();
QString command("python");
QStringList params = QStringList() << "script.py";
QProcess *process = new QProcess();
process->startDetached(command, params, path, &processID);
process->waitForFinished();
process->close();
}
path:你可以设置自己的路径
命令:你想在哪个程序中运行(在这个例子中是python)
params:要执行的脚本
&processID表示在主窗口关闭时终止进程
相关文章:
- 如何在c++中使用system()来运行包含空格的python脚本
- 如何将真正的字符串从python c-api转换为python脚本
- 在从Qt调用的Python脚本中导入OpenCV崩溃
- 使用 Main() 返回值作为 python 脚本的参数
- 如何制作启动 Python 脚本的 linux 后台进程(在 c 中)
- 从Raspberry Pi / Linux上的Python脚本运行和停止C++程序
- C++ Python 并不总是执行 Python 脚本
- 从C++调用 Python 脚本以持续流式传输数据
- 将数据从 c++ 文件连续发送到 Python 脚本以进行进一步处理
- 错误,在嵌入在C++程序中的 python 脚本中使用 matplotlib 时
- 在 2 个并行运行的脚本(python 和 C++)之间传递消息
- 在使用PyInstaller冻结Python脚本时包含一个C++可执行文件
- 使用 pipe() 和 fdopen() 将数据从 Python 脚本传递到 Windows 中的C++应用程序
- 困在PyObject_GetAttrString():如何从C++代码中获取Python函数脚本
- Python 脚本到 c .obj 文件
- 从 c++ 运行 python 脚本时出现问题
- C++ :从C++脚本内部触发存储在我机器上的 python 脚本
- 如何在 ubuntu 上的 php 脚本中获取程序(c,c++,java,python,php)的执行时间和内存使用量?
- 从 c++ 中运行 python 脚本,找不到模块
- 参数从 Python 脚本传递到 C++ 使用 boost-python