gpt4 book ai didi

process - Python 2.7.3 process.Popen() 失败

转载 作者:行者123 更新时间:2023-12-04 22:22:38 32 4
gpt4 key购买 nike

我目前在 Windows 7 64 位机器上使用 python 2.7.3(也在 Linux 32 位,Ubuntu 12.04 中开发)并且在让 python 与命令提示符/终端成功通信时遇到了奇怪的困难。我的代码如下所示:

import subprocess, logging, platform, ctypes

class someClass (object):

def runTerminalCommand:

try:
terminalOrCmdLineCommand = self.toString()

process = subprocess.Popen(terminalOrCmdLineCommand, shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
output = process.stdout.readlines()

if len(output) < 1:
logging.exception("{} error : {}".format(self.cmd,process.stderr.readlines()))
raise ConfigError("cmd issue : {}".format(self.cmd))
return output

except ValueError as err:
raise err
except Exception as e:
logging.exception("Unexpected error : " + e.message)
raise ConfigError("unexpected error")

现在,我知道如果我手动输入 self.toString() 返回的值将正确处理,所以我将其限制为我如何通过子进程将其发送到命令行的问题。我已经阅读了文档,发现 subprocess.check_call() 在遇到错误时不会返回任何内容,所以我正在使用 .Popen()

我得到的异常(exception)是,
    [date & time] ERROR: Unexpected error :
Traceback (most recent call last):
File "C:\[...]"
raise ConfigError("cmd issue : {}".format(self.cmd))
"ConfigError: cmd issue : [the list self.cmd printed out]"

我正在尝试做的是运行一个命令,然后读回输入。但是我似乎无法自动执行我想要运行的调用。 :(

有什么想法吗? (如果我遗漏了任何需要的细节,请告诉我)

非常感谢,提前。

最佳答案

The docs say :

Use communicate() rather than .stdin.write, .stdout.read or .stderr.read to avoid deadlocks due to any of the other OS pipe buffers filling up and blocking the child process.



您可以使用 .communicate() 如下:
p = Popen(cmd, stdout=PIPE, stderr=PIPE)
stdout_data, stderr_data = p.communicate()
if p.returncode != 0:
raise RuntimeError("%r failed, status code %s stdout %r stderr %r" % (
cmd, p.returncode, stdout_data, stderr_data))
output_lines = stdout_data.splitlines() # you could also use `keepends=True`

other methods to get subprocess output in Python

关于process - Python 2.7.3 process.Popen() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12713801/

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