【问题标题】:Run .py script in Qt在 Qt 中运行 .py 脚本
【发布时间】: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 处理程序以查看实际发生的情况?

标签: python python-3.x qt qt5


【解决方案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,参数),但我得到同样的错误。
  • 愚蠢的问题,但是您尝试过重新启动计算机吗?
猜你喜欢
  • 2018-12-16
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
相关资源
最近更新 更多