gpt4 book ai didi

解决python 执行shell命令无法获取返回值的问题

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章解决python 执行shell命令无法获取返回值的问题由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

问题背景:利用python获取服务器中supervisor状态信息时发现未能获取到返回值.

python获取执行shell命令后返回值得几种方式:

?
1
2
3
4
5
6
7
8
9
# 1.os模块
ret = os.popen( "supervisorctl status" )
ret_data = ret.read()
# 2.subprocess模块
ret = subprocess.Popen( 'supervisorctl status' ,shell = True ,stdout = subprocess.PIPE)
out,err = ret.communicate()
# 3.commands模块
ret_data = commands.getoutput( "supervisorctl status" )
# commands.getstatusoutput()还可获取到命令执行是否成功状态

一开始程序使用的是 os.popen() 方法,在交互式python shell或者IDE环境下使用上述方法都可以获取到执行的返回值,但当使用脚本执行时发现返回值为空,然后修改为使用 command.getoutput() 方法,这时获取到返回值为 “sh: supervisorctl: command not found”.

由此可知是执行命令时无法识别 supervisorctl 命令,但系统中是已经安装好supervisor的,于是使用 which supervisorctl 查看supervisorctl路径,以带路径的方式执行指令 “/usr/local/bin/supervisorctl status”,最后成功获取到返回值.

总结:

python使用shell命令操作非系统自带工具时,最好带上工具路径.

补充知识:python 如何判断调用系统命令是否执行成功 。

首先我们要知道如何调用系统命令:

?
1
2
3
4
5
6
7
8
9
>>> os.system( 'ls' )
anaconda - ks.cfg install.log.syslog 模板 图片 下载 桌面
install.log     公共的           视频 文档 音乐
0
>>>
>>> os.system( 'lss' )
sh: lss: command not found
32512
>>>

\\第一种,我们可以肉眼识别正确的会返回0,错误的则是非0 。

\\第二种,使用if判断调用系统命令返回值是否为0,如为0则不输出,不为0则输出 "Without the command" 。

-------------------错误------------------- 。

?
1
2
3
4
5
>>> if os.system( 'lss' ) ! = 0 : print 'Without the command'
...
 
sh: lss: command not found
Without the command

-------------------正确------------------- 。

?
1
2
3
4
5
6
>>> if os.system( 'ls' ) ! = 0 : print 'Without the command'
...
 
anaconda - ks.cfg install.log.syslog 模板 图片 下载 桌面
install.log     公共的           视频 文档 音乐
>>>

以上这篇解决python 执行shell命令无法获取返回值的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/weixin_40238625/article/details/79637227 。

最后此篇关于解决python 执行shell命令无法获取返回值的问题的文章就讲到这里了,如果你想了解更多关于解决python 执行shell命令无法获取返回值的问题的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

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