在 Qt 中运行 .py 脚本
Posted
技术标签:
【中文标题】在 Qt 中运行 .py 脚本【英文标题】:Run .py script in Qt 【发布时间】:2019-07-02 09:16:25 【问题描述】:我想运行(点击按钮后)一个 .py 脚本
我已经尝试过以下代码
QProcess p;
QStringList params;
params << "createJSON.py";
p.start("python.exe", params);
p.waitForFinished(-1);
QString p_stdout = p.readAll();
我的 Python 脚本在成功运行时会创建一个 JSON 文件。 所以我可以看看是否运行成功。
【问题讨论】:
你真的到了stdout
被读取的地步吗?
我得到一个空字符串。
你试过阅读stderr
吗?另外,根据文档,如果进程成功启动,QProcess 将发出started();否则,将发出 errorOccurred()。 您是否尝试将这些信号挂钩到 lambda 处理程序以查看实际发生的情况?
【参考方案1】:
我已经能够为您的代码编写更详细的版本。
QProcess p;
QStringList params;
params << "createJSON.py";
QObject::connect(&p, &QProcess::started, []()
qInfo() << "Process started!";
);
QObject::connect(&p, &QProcess::errorOccurred, [&p]()
qWarning() << "Error occurred" << p.errorString();
);
p.start("python.exe", params);
p.waitForFinished(-1);
QString p_stdout = p.readAllStandardOutput();
QString p_stderr = p.readAllStandardError();
qDebug() << "OUT" << p_stdout;
qDebug() << "ERR" << p_stderr;
这实际上会导致错误。就我而言,我得到以下信息:
进程开始了!
输出“”
ERR "python.exe: 无法打开文件 'createJSON.py': [Errno 2] 没有这样的文件或目录\n"
您的情况可能会有所不同。无论哪种方式,使用errorOccurred
信号和errorString
方法将允许您调试进程实际上无法启动的情况。阅读stderr
将允许您调试进程启动但未按预期运行的情况。
【讨论】:
谢谢。现在我得到: 1.“进程已启动!” 2.“发生错误:进程崩溃”3.“OUT”“”3.ERR“致命Python错误:initsfseconding:无法加载文件系统编解码器\nModuleNotFoundError:没有名为'encodings'的模块\n当前线程0x0000005834(最新先打电话):\n 我没有像“enconding”这样的东西…… 两件事。首先,尝试调用完整的 Python 路径(如果您有多个 Python 版本,这可能是原因):p.start("C:/Python36/python.exe")
而不仅仅是 "python.exe"
。您也可以找到帮助here(即使原始主题不相关,但很多人都在发布您所面临问题的答案)。
谢谢你的回答,我用配置重新安装了python(“将Python添加到PATH”),我也按照你说的做了:p.start(“C:/…/Python37-32/ python.exe,参数),但我得到同样的错误。
愚蠢的问题,但是您尝试过重新启动计算机吗?以上是关于在 Qt 中运行 .py 脚本的主要内容,如果未能解决你的问题,请参考以下文章