gpt4 book ai didi

python - QProcess 无法写入 cmd.exe

转载 作者:行者123 更新时间:2023-11-28 19:25:50 26 4
gpt4 key购买 nike

我似乎无法让 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com