Pyqt - 无法从 QProcess 获得任何输出

Posted

技术标签:

【中文标题】Pyqt - 无法从 QProcess 获得任何输出【英文标题】:Pyqt - Can not get any output from 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 需要区分程序及其参数。 我已经发布了一个答案,请标记为正确 【参考方案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"])

【讨论】:

正如我在之前的评论中提到的,为什么这有效,而这个:pyqt.sourceforge.net/Docs/PyQt4/qprocess.html#start-2 不是?它说你可以像我在我的问题中所说的那样,在一个用空格分隔的字符串中传递所有内容。

以上是关于Pyqt - 无法从 QProcess 获得任何输出的主要内容,如果未能解决你的问题,请参考以下文章

PyQt4 QProcess 状态始终为 0,各种插槽也无法正常工作

使用 QProcess 通过 PyQt 运行和监控系统进程

PyQt:多个 QProcess 和输出

PyQt5 中 QProcess 的刷新缓冲区

在 PyQt 中使用 QProcess 运行类方法

QProcess正常退出