【问题标题】:Pyqt - Can not get any output from QProcessPyqt - 无法从 QProcess 获得任何输出
【发布时间】:2018-07-17 09:35:13
【问题描述】:

我在 SO 以及互联网上的任何地方都阅读了很多类似的问题,但我找不到解决方案。

我有以下要运行的命令:

c:\\lscc\\Programmer\\3.8_x64\\bin\\nt64\\pgrcmd.exe -infile test.xcf

从 CMD 窗口我有这样的标准输出:

Lattice Programmer Diamond(64 位)3.8.0.115.3 命令行参数 检查 - OK Loading Programmer Device Database... 完成。写日志 文件到 /programmer.log 打开 XCF 文件... 完成。编程 XCF 内容... 连接到 Lattice Cable 服务器。失败。

我想通过 QProcess 在我的应用程序中运行它,但我找不到获得相同输出的方法。 我有以下代码,命令已执行,但我无法获得任何输出:

process = QProcess()
process.setProcessChannelMode(QProcess.MergedChannels)
process.start("c:\\lscc\\Programmer\\3.8_x64\\bin\\nt64\\pgrcmd.exe -infile test.xcf")
process.waitForFinished()

> process.readAllStandardError() = b" # empty
> process.readAllStandardOutput() = b" # empty
> process.exitCode() = -9

只有有用的东西在errorString中:

> process.errorString() = "Unknown error"

【问题讨论】:

  • 试试:process.start("c:\\lscc\\Programmer\\3.8_x64\\bin\\nt64\\pgrcmd.exe", ["-infile" "test.xcf"])
  • @eyllanesc 我的天,真的吗?有用!我什至没有尝试过,因为 Qt doc 说这两种方法都应该做同样的工作。问题是他们为什么不这样做。
  • QProcess 需要区分程序及其参数。
  • 我已经发布了一个答案,请标记为正确

标签: pyqt stdout qprocess


【解决方案1】:

您正在使用以下方法:

void QProcess::start(const QString &program, const QStringList &arguments, QIODevice::OpenMode mode = ReadWrite)

显然 QProcess 需要区分两者,因此您必须将其分开:

process.start("c:\\lscc\\Programmer\\3.8_x64\\bin\\nt64\\pgrcmd.exe", ["-infile" "test.xcf"])

【讨论】: