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 获得任何输出的主要内容,如果未能解决你的问题,请参考以下文章