如何为子流程声明空对象?

我需要从python脚本运行shell命令。我正在使用库子进程。我想将此命令打包成try / except块,以防出现某些错误。但是,我无法从result块中的变量except中获取变量try的信息。我试图从try / except块中声明结果对象,但是找不到有效的解决方案。这是我的代码

import subprocess

result = None

try:
    result = subprocess.run(['lsdkdfk'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    print(result.stdout)
except Exception as e:
    print(result.stderr) #this doesn't work

有人可以帮我吗?

wo511461152 回答:如何为子流程声明空对象?

subprocess.run抛出FileNotFoundError,如果找不到您要使用的命令,则不会返回任何内容。 “ lsdkdfk”不是有效命令,因此result从未分配任何内容,也没有stderr可供查看。但是,您可以根据需要打印捕获的异常。

如果确实找到了命令,但命令本身失败了,除非您指定参数check=True,否则它将不会引发异常。现在,您还可以查看stderr。

>>> try:
...   result = subprocess.run(["ls","asdf"],capture_output=True,encoding="utf-8")
... except FileNotFoundError as e:
...   print("I caught this: ",e)
...
>>> result.stdout
''
>>> result.stderr
"ls: cannot access 'asdf': No such file or directory\n"
>>> try:
...   result = subprocess.run(["invalidcmd",e)
...
I caught this: [Errno 2] No such file or directory: 'invalidcmd'
本文链接:https://www.f2er.com/3168132.html

大家都在问