首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在中使用C++调用Python脚本

在中使用C++调用Python脚本
EN

Stack Overflow用户
提问于 2017-01-31 14:54:50
回答 2查看 2.4K关注 0票数 1

我有一个Python脚本,它以三个文件夹作为输入。我正在尝试创建一个GUI,在其中浏览三个文件夹位置,然后使用这些参数调用Python脚本。我已经创建了GUI并可以浏览文件夹位置,但是我似乎在使用QProcess或Python.h调用Python.h脚本时遇到问题。

QProcess:

代码语言:javascript
复制
QString arg1 = ui->folder1->text();
QString arg2 = ui->folder2->text();
QString arg3 = ui->folder3->text();

QProcess p;
QString script = "python script.py";
QStringList params;

params << arg1 << arg2 << arg3;
p.start(script, params);
p.waitForFinished(-1);

QString p_stdout = p.readAll();
ui->displayOutput->setText(p_stdout);

毕顿:

代码语言:javascript
复制
QString arg1 = ui->folder1->text();
QString arg2 = ui->folder2->text();
QString arg3 = ui->folder3->text();

const char* args1 = arg1.toUtf8().constData();
const char* args2 = arg2.toUtf8().constData();
const char* args3 = arg3.toUtf8().constData();

PyObject *pName, *pModule, *pDict, *pFunc, *pValue, *pResult, *pArgs;

// Initialize Python Interpreter
Py_Initialize();

// Convert python script's name into Python string
pName = PyString_FromString("script");

// Import the file as a Python module
pModule = PyImport_Import(pName);

// Create a dictionary for the contents of the module
pDict = PyModule_GetDict(pModule);

// Arguments
pArgs = PyTuple_New(3);
PyTuple_SetItem(pArgs, 0, PyString_FromString(args1));
PyTuple_SetItem(pArgs, 1, PyString_FromString(args2));
PyTuple_SetItem(pArgs, 2, PyString_FromString(args3));

pFunc = PyDict_GetItemString(pDict, "main");

pResult = PyObject_CallObject(pFunc, pArgs);

Py_Finalize();

我会说,当我在调试或发行版中运行Python.h时,当我按下运行代码的按钮时,程序就会崩溃。是否有更好的方法来运行这两种代码而不遇到问题?

编辑:--它能够使用QProcess方法不带参数地运行,但是当我包含参数(即文件夹路径)时,它将不会运行。我做了一个函数,把引号放在那些文件夹中有空格,但它仍然不能运行。是否有一种方法将文件夹作为参数传递,以便Python脚本能够运行?

EN

回答 2

Stack Overflow用户

发布于 2017-02-02 14:35:58

所以,在尝试了不同的方法之后,这就是我在Windows上的工作方式

代码语言:javascript
复制
QString cmd_qt = QString("python %1script.py %2 %3 %4").arg(filename1).arg(filename3).arg(filename4).arg(filename5);
const char* cmd = cmd_qt.toLocal8Bit().constData();
system(cmd);

这只是通过命令提示符调用Python函数。我不知道这是不是最有效的方法。但现在起作用了。如果有更好的方法,请告诉我。

票数 1
EN

Stack Overflow用户

发布于 2020-12-02 18:34:57

代码语言:javascript
复制
QString script = "python "+ "../folder1/script.py;
const char* cmd = script.toLocal8Bit().constData();
system(cmd);

不是正确地读取内容。

输出始终显示无效的Test_log目录。

但是,当从命令行直接运行python时,script.py将在我的环境变量中设置相应的o/p。

代码语言:javascript
复制
 log_dir = '../Test_Logs/'
if not os.path.exists(log_dir):
    print('Invalid Test_log directory')
    exit()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41960630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档