子进程 check_output 返回非零退出状态 1
Subprocess check_output returned non-zero exit status 1
这是我的 python 代码:
import subprocess
subprocess.check_output("ls",shell=True,stderr=subprocess.STDOUT)
import subprocess
subprocess.check_output("yum",shell=True,stderr=subprocess.STDOUT)
第一个 .check_output()
效果很好,但第二个 returns 这个:
Traceback (most recent call last):
File "/usr/lib/x86_64-linux-gnu/gedit/plugins/pythonconsole/console.py", line 378, in __run
r = eval(command, self.namespace, self.namespace)
File "<string>", line 1, in <module>
File "/usr/lib/python3.4/subprocess.py", line 616, in check_output
raise CalledProcessError(retcode, process.args, output=output)
subprocess.CalledProcessError: Command 'yum' returned non-zero exit status 1
为什么会这样?是因为 ls
是原来的 shell 命令,而 yum
是新包吗?我怎么解决这个问题?
您启动的命令yum
已正确执行。它 returns 非零状态,表示在处理命令期间发生错误。您可能想在 yum
命令中添加一些参数来解决这个问题。
您的代码可以这样显示此错误:
import subprocess
try:
subprocess.check_output("dir /f",shell=True,stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
raise RuntimeError("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))
名称中的单词check_
表示如果命令(shell在这种情况下returns是最后一个命令的退出状态(yum
在这种情况下)) return 的非零状态然后它会引发 CalledProcessError
异常。这是设计使然。如果您想要 运行 的命令在成功时可能 return 非零状态,则要么捕获此异常,要么不使用 check_
方法。你可以在你的情况下使用 subprocess.call
因为你忽略了捕获的输出,例如:
import subprocess
rc = subprocess.call(['grep', 'pattern', 'file'],
stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)
if rc == 0: # found
...
elif rc == 1: # not found
...
elif rc > 1: # error
...
您不需要 shell=True
到 运行 您问题中的命令。
这是我的 python 代码:
import subprocess
subprocess.check_output("ls",shell=True,stderr=subprocess.STDOUT)
import subprocess
subprocess.check_output("yum",shell=True,stderr=subprocess.STDOUT)
第一个 .check_output()
效果很好,但第二个 returns 这个:
Traceback (most recent call last):
File "/usr/lib/x86_64-linux-gnu/gedit/plugins/pythonconsole/console.py", line 378, in __run
r = eval(command, self.namespace, self.namespace)
File "<string>", line 1, in <module>
File "/usr/lib/python3.4/subprocess.py", line 616, in check_output
raise CalledProcessError(retcode, process.args, output=output)
subprocess.CalledProcessError: Command 'yum' returned non-zero exit status 1
为什么会这样?是因为 ls
是原来的 shell 命令,而 yum
是新包吗?我怎么解决这个问题?
您启动的命令yum
已正确执行。它 returns 非零状态,表示在处理命令期间发生错误。您可能想在 yum
命令中添加一些参数来解决这个问题。
您的代码可以这样显示此错误:
import subprocess
try:
subprocess.check_output("dir /f",shell=True,stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
raise RuntimeError("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))
名称中的单词check_
表示如果命令(shell在这种情况下returns是最后一个命令的退出状态(yum
在这种情况下)) return 的非零状态然后它会引发 CalledProcessError
异常。这是设计使然。如果您想要 运行 的命令在成功时可能 return 非零状态,则要么捕获此异常,要么不使用 check_
方法。你可以在你的情况下使用 subprocess.call
因为你忽略了捕获的输出,例如:
import subprocess
rc = subprocess.call(['grep', 'pattern', 'file'],
stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)
if rc == 0: # found
...
elif rc == 1: # not found
...
elif rc > 1: # error
...
您不需要 shell=True
到 运行 您问题中的命令。