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

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

本文解决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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。