0
我有一個Python腳本需要三個文件夾作爲輸入。我正在嘗試創建一個GUI,在其中瀏覽三個文件夾位置,然後以這些參數作爲參數調用Python腳本。我已經創建了GUI並可以瀏覽文件夾位置,但是我似乎遇到了使用QProcess或Python.h調用Python腳本的問題。在QT Creator中使用C++調用Python腳本
QProcess中:
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);
Python.h:
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腳本可以運行?
您應該指定腳本所在的路徑。 QProceas提供了這種可能性。腳本名稱中的空白空間也需要反斜槓。 – Cristi
當我使用QProcess方法時,沒有任何反應,就好像按鈕沒有代碼一樣。我不知道我是否缺少其他東西。 –
我不認爲它找到你的腳本的路徑。看到我的第一條評論。你有沒有試過QProcess :: SetWorkingDirectory? – Cristi