python - QProcess 无法写入 cmd.exe

标签 python qt cmd pyside qprocess

我似乎无法让 QProcess 通过 stdin 将命令传递给 cmd.exe。我也尝试过其他命令行应用程序。

这是我用来尝试和调试的一些简单代码:

prog = "c:/windows/system32/cmd.exe"
arg = [""]
p = QtCore.QProcess()
retval = p.start(prog, arg)
print retval
print p.environment()
print p.error()
p.waitForStarted()
print("Started")
p.write("dir \n")
time.sleep(2)
print(p.readAllStandardOutput())
print(p.readAllStandardError())
p.waitForFinished()
print("Finished")
print p.ExitStatus()

输出:

None
[]
PySide.QtCore.QProcess.ProcessError.UnknownError
Started

{时间流逝}

Finished
PySide.QtCore.QProcess.ExitStatus.NormalExit
QProcess: Destroyed while process is still running.

那么“dir\n”命令从未发出过吗?

最佳答案

您的代码有几个问题。

  1. 传递一个空字符串作为参数(显然)不是一个好主意
  2. start(...) 方法不返回值,但 waitForStarted() 返回值
  3. 在调用 readAllStandardOutput() 之前调用 waitForReadyRead()
  4. waitForFinished() 不会返回(或只是超时),除非您使进程 (cmd.exe) 实际退出

对于您的示例,这应该是一个最小的工作版本:

from PySide import QtCore

prog = "cmd.exe"
arg = []
p = QtCore.QProcess()
p.start(prog, arg)
print(p.waitForStarted())

p.write("dir \n")
p.waitForReadyRead()
print(p.readAllStandardOutput())

p.write("exit\n")
p.waitForFinished()
print("Finished: " + str(p.ExitStatus()))

关于python - QProcess 无法写入 cmd.exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13467680/

相关文章:

Python distutils 没有使用正确版本的 gcc

c++ - 如何删除 QStringList 中的冗余元素

c++ - QTextEdit 作为 HTML 编辑器

python - 查看Docker Swarm命令行输出

python - 关于正则表达式大小写

python - 与 einsums 的交叉产品

c++ - QSettings - 读取路径值的方式是什么?

windows - 使用xcopy复制所有desktop.ini

Powershell 从 cmd 运行消息框

php - 为什么我不能在 Laravel 路径中使用 'php artisan' cmd (Win)