Python执行shell命令(并获取执行结果)

Python执行shell命令(并获取执行结果)执行 shell 语句 os system xxx 可执行 shell 语句 执行会将结果打印至工作台执行 shell 语句并获取结果 os popen xxx readlines 执行并获取全部的执行结果 获取结果为 list 每行内容为 list 的一个值 需要具体哪一行内容可直接 list 0 提取 推荐使用 其实通过 ctrl 可以看到 popen 方法源码底层就是 subprocess Po

代码

# -*- coding: utf-8 - import os import subprocess # 只能判断是否执行成功 def os_system(stmt): result = os.system(stmt) if result is not 0: print("命令执行失败") else: return result # 结果为0则表示执行成功,为其他值则表示执行不成功 # 只能获取执行结果 def os_popen(stmt, *parm): re = os.popen(stmt).readlines() result = [] for i in range(0, len(re) - 1): # 由于原始结果需要转换编码,所以循环转为utf8编码并且去除\n换行 res = re[i].strip('\n') result.append(res) if parm == (): return result # 获取全部执行结果 else: line = int(parm[0]) - 1 return result[line] # 获取执行结果的指定行 # 只能判断是否执行成功 def subprocess_call(stmt): result = subprocess.call(stmt) # 执行失败不需要特殊处理,命令执行失败会直接报错 return result # 结果为0则表示执行成功,为其他值则表示执行不成功 # 只能判断是否执行成功 def subprocess_check_call(stmt): # 基本与call一致 result = subprocess.check_call(stmt) # 执行失败不需要特殊处理,命令执行失败会直接报错 return result # 结果为0则表示执行成功,为其他值则表示执行不成功 # 只能获取执行结果 def subprocess_getoutput(stmt): result = subprocess.getoutput(stmt) # 执行失败不需要特殊处理,因为该方法无法判断失败成功,只负责将结果进行返回 return result # 返回执行结果,但是结果返回的是一个str字符串(不论有多少行) # 只能获取执行结果 def subprocess_check_output(stmt): result = subprocess.check_output(stmt).decode('utf-8') # 执行失败不需要特殊处理,命令执行失败会直接报错 return result # 返回执行结果,但是结果返回的是一个str字符串(不论有多少行),并且返回的结果需要转换编码 # 既可以判断执行是否成功,还可以获取执行结果 def subprocess_popen(statement): p = subprocess.Popen(statement, shell=True, stdout=subprocess.PIPE) # 执行shell语句并定义输出格式 while p.poll() is None: # 判断进程是否结束(Popen.poll()用于检查子进程(命令)是否已经执行结束,没结束返回None,结束后返回状态码) if p.wait() is not 0: # 判断是否执行成功(Popen.wait()等待子进程结束,并返回状态码;如果设置并且在timeout指定的秒数之后进程还没有结束,将会抛出一个TimeoutExpired异常。) print("命令执行失败,请检查设备连接状态") return False else: re = p.stdout.readlines() # 获取原始执行结果 result = [] for i in range(len(re)): # 由于原始结果需要转换编码,所以循环转为utf8编码并且去除\n换行 res = re[i].decode('utf-8').strip('\r\n') result.append(res) return result 

结果查看(自己体会)

统一执行命令“ls”和错误命令“lss”

os.system

在这里插入图片描述
在这里插入图片描述

os.popen

在这里插入图片描述
在这里插入图片描述

subprocess.call

在这里插入图片描述
在这里插入图片描述

subprocess.check_call

在这里插入图片描述
在这里插入图片描述

subprocess.getoutput

在这里插入图片描述
在这里插入图片描述

subprocess.check_output

在这里插入图片描述
在这里插入图片描述

subprocess.Popen在这里插入图片描述

在这里插入图片描述

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

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

(0)
上一篇 2026年3月19日 下午8:19
下一篇 2026年3月19日 下午8:20


相关推荐

  • ArrayList扩容机制。

    ArrayList扩容机制。1)直接new一个ArrayList对象时(未指定初始容量大小)是一个空的数组,容量大小为零。publicArrayList(){//DEFAULTCAPACITY_EMPTY_ELEMENTDATA变量为一个空的数组privatestaticfinalObject[]DEFAULTCAPACITY_EMPTY…

    2022年5月25日
    38
  • 暴力激活成功教程密码算法-JS

    暴力激活成功教程密码算法-JSmd5加密算法vargetMd5=function(string){functionRotateLeft(lValue,iShiftBits){return(lValue<>>(32-iShiftBits));}functionAddUnsigned(lX,lY){

    2022年8月22日
    8
  • Windows下通过IDEA使用Claude Code

    Windows下通过IDEA使用Claude Code

    2026年3月15日
    2
  • Error creating bean with name ‘eurekaClientConfigBean’: Singleton bean creation not allowed!

    做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!今天发现一个错误,简单记录一下,运行一个项目一直启动不了,发现控制台报错了。首先说明一下这是一个Spring boot 集成Quartz做任务调度的项目,版本信息就不贴了,因为和本文最终的解决方案没有什么关系。错误信息如下:2019-09-05 09:56:23.993 WARN [web-scheduler…

    2022年2月28日
    55
  • 面试java工程师的自我介绍_软件开发和程序员一样吗

    面试java工程师的自我介绍_软件开发和程序员一样吗程序员面试时一段短短的自我介绍,其实是为了揭开更深入的面谈而设计的。下面学习啦小编为你带来java程序员面试自我介绍范文的内容,希望你们喜欢。关于java程序员面试自我介绍范文篇一本人叫小冰,今年22岁,现在是吉林大学软件开发与信息管理专业方向的三年级学生,对软件开发怀有浓烈的兴趣,且对JAVA语言尤其熟悉,能熟练使用jsp、struts、struts2、sring2和hibernate3等流行的…

    2025年6月28日
    7
  • python正则表达式匹配中文(Excel如何根据名字匹配编码)

    字符串的编码乱码问题由来已久,真的是令人头疼。这不是在做正则匹配中文时候,编码又一次成了拦路虎,在这儿记录两点。第一,字符串编码。第二,正则匹配中文。早期编码都用ASCII编码,用一个字节来处理编码。如大写A编码为65,但处理中文时候,一个字节显然不够,至少两哥字节,还不能和ASCII冲突,,中国制定GB2312编码,把中文编进去。类似的,韩国,日本都出来格子标准,结果就是多语言混合的文本中会

    2022年4月15日
    47

发表回复

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

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