Python执行Shell命令无法获取返回值的排查与解决

云舒
云舒
发布时间:2026-10-14 | 5人浏览过
原创

本文解决Python脚本中执行Shell命令无法获取返回值的问题。通过对比os.popen、subprocess和commands模块,分析因环境变量缺失导致命令未找到的原因,并给出使用绝对路径执行非系统自带工具(如supervisorctl)的解决方案。

问题背景与现象

在利用Python获取服务器中supervisor状态信息时,发现程序未能正确获取到预期的返回值。

Python获取Shell命令结果的常用方法

Python中获取Shell命令执行结果的常见方式主要有以下几种。


# 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()还可获取到命令执行是否成功状态

常见错误排查与路径解决方案

最初程序采用方法,在交互式Python Shell或IDE环境中运行正常,但在脚本模式下执行时返回值为空。随后尝试改用方法,此时获取到的返回值提示“sh: supervisorctl: command not found”,表明命令未被识别。

上述错误说明执行环境无法直接识别supervisorctl命令。尽管系统中已安装该工具,但通过查询其实际路径后,改用绝对路径“/usr/local/bin/supervisorctl status”执行指令,最终成功获取到返回值。

解决方案总结

总结上述排查过程,

当Python调用Shell命令操作非系统自带工具时,建议明确指定工具的完整路径,以避免因环境变量配置问题导致的命令未找到错误。

判断命令执行成功的技巧

补充知识:Python中判断系统命令执行是否成功的方法。

首先需要了解如何调用系统命令并判断其状态。


>>> 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”提示。

以下是执行错误命令时的输出示例。


>>> if os.system('lss') !=0:print 'Without the command'
...
 
sh: lss: command not found
Without the command

以下是执行正确命令时的输出示例。


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

以上关于解决Python执行Shell命令无法获取返回值的问题分享完毕,希望能为读者提供参考。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表