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

python执行shell命令,一般使用os或subprocess模块。
两者都可以执行shell命令,但执行效果还是不一样的。
subprocess模块的使用可以参考
话不多说直接上代码

代码

# -*- 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在这里插入图片描述

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值