Zon*_* Wu 46 python subprocess python-3.x
这些是我的python代码:
import subprocess
subprocess.check_output("ls",shell=True,stderr=subprocess.STDOUT)
import subprocess
subprocess.check_output("yum",shell=True,stderr=subprocess.STDOUT)
Run Code Online (Sandbox Code Playgroud)
第一次工作顺利,但第二次回归:
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
Run Code Online (Sandbox Code Playgroud)
为什么会这样?是因为ls是原始shell命令,但是yum是新包吗?如何解决这个问题呢?
Plo*_*uff 40
yum您启动的命令已正确执行.它返回非零状态,这意味着在处理命令期间发生错误.您可能希望在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))
Run Code Online (Sandbox Code Playgroud)
jfs*_*jfs 11
check_名称中的单词表示如果命令(在这种情况下返回最后一个命令的退出状态的shell(yum在本例中为))返回非零状态,则它会引发CalledProcessError异常.这是设计的.如果要运行的命令在成功时可能返回非零状态,则捕获此异常或不使用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
...
Run Code Online (Sandbox Code Playgroud)
您不需要shell=True运行问题中的命令.
| 归档时间: |
|
| 查看次数: |
81590 次 |
| 最近记录: |