【发布时间】:2021-09-04 13:01:54
【问题描述】:
我有一小段代码可以从 Qt c++ 执行 python 脚本。我该如何调试?下面我知道问题是“import nltk”,但我怎么能在一个完整的项目中理解它。我在 Spyder 中运行了 python 代码,甚至我在 Qt 和 Spyder 中都放置了相同的 python 解释器路径,但是在 Spyder 中它运行正确并且创建了 tmp.json 文件,而在 Qt 中没有创建 tmp.json 文件。
main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <QProcess>
int main(int argc, char *argv[])
{
QProcess p;
QStringList params;
params << "F:/NLP/google_corpus/scrape_python/qt/cpy2/someFunction.py";
p.start("C:/Users/A/anaconda3/python.exe", params);
qDebug() << "Hello World" << p.error();
if ( p.state() == QProcess::NotRunning ) {
return -2;
};
//p.waitForFinished(-1);
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
someFunction.py
import json
import sys
import sys
sys.path.append('C:\\Users\\A\\anaconda3\\lib\\site-packages\\IPython\\extensions')
sys.path.append('C:\\Users\\A\\.ipython')
import nltk
#nltk.data.path.append('.')
previous_tokens = ["hey", "how", "are", "you"]
json_object = json.dumps(previous_tokens)
with open('F:\\NLP\\google_corpus\\scrape_python\\qt\\cpy2\\tmp.json', "w") as outfile:
outfile.write(json_object)
编辑:Qt python 和 Spyder 中的系统路径不同,所以我在下面添加了几行:
import sys
sys.path.append('C:\\Users\\A\\anaconda3\\lib\\site-packages\\IPython\\extensions')
sys.path.append('C:\\Users\\A\\.ipython')
但还是同样的问题。
【问题讨论】:
-
你的 python 进程的工作目录在这个 Spyder 东西中是不同的,或者它设置了一些你的 Qt 进程没有设置的额外环境变量。
-
@Botje 如果您的意思是 python 工作目录,是的,它们是相同的。我在 qt python 脚本中添加了 Spyder (Tools-->Environmet variables-->path) 中的环境变量,但同样的问题。
-
请使用您收到的错误消息编辑您的问题。也请把 Python 的
sys.path的内容都贴出来。 -
@Botje 我编辑了 spyder 中的所有环境变量并将其添加到 qt python 脚本中。同样的问题!
-
您是否有意省略了
sys.path.append行上可能很重要的那个\?此外,Python 对正斜杠路径感到满意。