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

python执行shell获取返回值_解决python 执行shell命令无法获取返回值的问题问题背景 利用 python 获取服务器中 supervisor 状态信息时发现未能获取到返回值 python 获取执行 shell 命令后返回值得几种方式 1 os 模块 ret os popen supervisorct ret data ret read 2 subprocess 模块 ret subprocess Popen supervisorct

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

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

一开始程序使用的是 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 如何判断调用系统命令是否执行成功

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

>>> 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命令无法获取返回值的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225561.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午9:02
下一篇 2026年3月17日 上午9:02


相关推荐

  • sql优化的几种方法面试题_mysql存储过程面试题

    sql优化的几种方法面试题_mysql存储过程面试题drop、delete与truncate分别在什么场景之下使用?对比一下他们的区别:droptable1)属于DDL2)不可回滚3)不可带where4)表内容和结构删除5)删除速度快truncatetable1)属于DDL2)不可回滚3)不可带where4)表内容删除5)删除速度快deletefrom1)属于DML2)可回滚3)可带where4)表结构在,表内容要看where执行的情况5)删…

    2022年8月27日
    7
  • 工信部NVDB提示:防范OpenClaw开源AI智能体安全风险

    工信部NVDB提示:防范OpenClaw开源AI智能体安全风险

    2026年3月13日
    2
  • 学习MAXScript

    学习MAXScriptMaxScript aComprehensi 基础语法 select Box selectanyobj 打开 MAXScript 侦听器窗口 开启宏录制器 这样 每当我们进行一个操作 比如创建一个 Box 那么宏录制器中会显示当前动作所对应的 MAXScript 命令

    2026年3月19日
    2
  • 深度图可视化

    深度图可视化之前一直以为深度图应该是黑灰色的,不清楚为什么还有彩色的深度图,直到今天才知道原来这是深度图可视化。专门写篇博客纪念一下!灰黑色的图片人眼很难识别出其中的物体,感知深度的变化。所以才需要可视化,下面是几种颜色空间:…

    2022年4月25日
    49
  • FFmpeg的H.264解码器源代码简单分析:概述「建议收藏」

    FFmpeg的H.264解码器源代码简单分析:概述「建议收藏」本文简单记录FFmpeg中libavcodec的H.264解码器(H.264Decoder)的源代码。这个H.264解码器十分重要,可以说FFmpeg项目今天可以几乎“垄断”视音频编解码技术,很大一部分贡献就来自于这个H.264解码器。这个H.264解码器一方面功能强大,性能稳定;另一方面源代码也比较复杂,难以深入研究。本文打算梳理一下这个H.264解码器的源代码结构,以方便以后深入学习H.264使用。

    2022年6月22日
    116
  • nodejs

    nodejs

    2021年8月25日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号