繁体   English   中英

当子进程正常工作时,check_output在python 3.6中不起作用

check_output doesn't works in python 3.6 while subprocess works fine

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试使用“ check_output”方法获取我的python程序中命令的输出。 但我收到此错误:

   out = check_output(command5 , shell=True)

在check_output ** kwargs)中的文件“ /usr/lib64/python3.6/subprocess.py”,行336。stdout在运行输出中,文件“ /usr/lib64/python3.6/subprocess.py”,行418 = stdout,stderr = stderr)subprocess.CalledProcessError:命令'oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_rht-ccp --results-arf arf.xml / usr / share / xml / scap / ssg / content / ssg-centos7- ds.xml'返回了非零退出状态2。

这是我程序的相关部分:

command4 = "oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_rht-ccp --results-arf arf.xml /usr/share/xml/scap/ssg/content/ssg-centos7-ds.xml"
out = check_output(command4 , shell=True)

我确定命令是正确的,因为我在编写时会得到结果:

subprocess.call(command5,shell=True)

我正在使用python 3.6,并在centos 7中工作。

知道为什么check_output无法得到结果吗?

1 个回复

完全正常 ,因为您运行的命令生成了非零的退出代码。 这意味着您运行的命令表明存在某些问题。

请参阅subprocess.check_output()文档

如果返回码非零,则引发CalledProcessError。

这等效于:

 run(..., check=True, stdout=PIPE).stdout 

return_value不为0时, check=True标志告诉run()引发异常:

如果check为true,并且进程以非零退出代码退出,则将引发CalledProcessError异常。

您使用的另一个函数subprocess.call()并未设置check=True

运行args描述的命令。 等待命令完成,然后返回returncode属性。

这等效于:

 run(...).returncode 

因此,要么使用check_output() ,要么捕获引发的异常,要么不修复正在运行的命令。 call()有效并不表示该过程实际上产生了成功的结果。

例如,您可以直接使用subprocess.run()

proc = subprocess.run(
    command5, shell=True, text=True
    stdout=subprocess.PIPE, stderr=subprococess.PIPE)
if proc.returncode:
    print(f'Issue reported, exit code {proc.returncode}, stderr:')
    print(proc.stderr)
else:
   print(proc.stdout)
1 python子进程check_output

我尝试使用python子进程执行以下命令,但失败。 请帮忙 我得到以下输出: Traceback (most recent call last): File "./script.py", line 65, in <module> retcode = sub ...

3 Python子进程没有属性“check_output”

我有使用subprocess.check_output代码就好了,我不得不重新安装 Ubuntu 16.04,然后它抱怨它现在找不到属性 check_output。 请注意,我使用的是 Python2.7,根据这里的这篇文章应该可以解决这个问题,但事实并非如此。 subprocess.che ...

6 子流程check_output上的路径

使用crontab执行python脚本时,该脚本缺少环境变量。 该脚本会调用一个可执行文件,某些Linux发行版本会在/usr/bin下发布该可执行文件,在/sbin下则会发布其他可执行文件。 subprocess.check_output()不能解决这个问题。 我可以假设wh ...

7 无法从子流程check_output检索输出

我想知道如何将程序的输出保存到文件中。 特别是,当我像这样从Python运行它时,我试图将vowpal_wabbit应用程序的所有输出保存到文件中: 但是,在程序本身执行良好的同时,它什么也没打印出来。 这很奇怪,因为从终端以相同的参数运行时,它为我提供了一些有用的信息。 ...

8 python 2 subprocess check_output不返回错误输出

我有这种方法 哪个工作,但由于某种原因不会返回specfici命令的错误输出 输出: 当我运行命令ctmpsm -UPDATEAJF 0e4ba HOLD只是形成普通的外壳时,我得到以下错误输出 这与我的python代码中无用的错误输出不同,我无法终生弄清楚为什么 ...

9 Python 子进程 .check_call 与 .check_output

我的 python 脚本(python 3.4.3)通过子进程调用一个 bash 脚本: bashscript包含以下行: 它打开到某个远程主机的共享主连接以允许一些后续操作。 执行 python 脚本时,它会提示输入ssh行的密码,但在输入密码后它会阻塞并且永远不会返回。 当我 ctr ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM