subprocess 模块

基础概念

  • subprocess 模块主要用于执行 系统命令
  • subprocess 模块允许你产生新的进程,并获得它们的返回状态
  • 通俗地说就是通过这个模块,你可以在 Python 的代码里执行操作系统级别的命令,比如 "ifconfig" 、"du -sh" 等等

run 方法

功能:执行 args 参数所表示的命令,等待命令结束,并返回一个 CompletedProcess 类型对象

>>> import subprocess

>>> subprocess.run(['ls'])  # 将命令写到列表中,执行linux命令

>>> subprocess.run(['ls', '/home'])  # 将命令和操作的目录写到列表中,执行linux命令

>>> subprocess.run('ls /home')  # 以字符串形式执行linux命令,无法区分命令和目标文件,错误,会把'ls /home 当做一个整体

>>> subprocess.run('ls /home', shell=True)  # 若想以字符串形式执行,指定shell解释器

通过 shell 执行命令

  • subprocess.run(['ls', '/home']) 这种方式不支持环境变量,不支持命令的扩展,不支持 shell解释器 下执行命令,所以使用字符串的方式执行 linux命令

>>> subprocess.run('echo $HOME', shell=True)  # 使用run()查看当前用户的家目录,使用shell执行命令

>>> subprocess.run('ls /root', shell=True)

run 方法返回值

  • run 方法查看上一级目录下的内容,使用 shell 执行命令

>>> subprocess.run('ls ..', shell=True)  # 最后一行为返回值

day01  day02  day03  day04

CompletedProcess(args='ls ..', returncode=0)

# run方法查看上一级目录下的内容,赋值给变量result

>>> result =subprocess.run('ls ..', shell=True)

day01  day02  day03  day04

# 查看变量result的值,为run()的返回值

>>> result

CompletedProcess(args='ls ..', returncode=0)

# 查看result中args列表的内容,为linux命令

>>> result.args

'ls ..'

# 查看result中returncode的值,为0;returncode 为状态码

# 上一条命令执行成功,结果为0;反之,结果为非零值

>>> result.returncode

'0'

注意

  • subprocess 模块虽然可以支持所有的 linux 命令,但不可乱用,放弃其他的模块
  • subprocess 模块编写的代码,不具有跨平台性,不能在 windows,mac 等系统使用

练习 1:调用 ping 命令

需求

  • 调用 ping 命令
  • 编写 ping 函数
  • 用于测试远程主机的联通性
  • ping 通显示:x.x.x.x:up
  • ping 不通显示:x.x.x.x:down

import subprocess # 导入subprocess模块,用于执行linuxping命令

def ping(host):  # 使用def定义函数ping(),用于检测主机的联通性

# subprocess.run() 在shell解释器下,执行linux命令;ping -c 2 发送两个数据包;

# %s 为占位符;&> /dev/null 将错误和正确信息都写入黑洞设备;

# result 获得run()得放回信息,returncode为状态码(0 指命令成功;非0 指失败)

    result=subprocess.run('ping -c 2 %s &> /dev/null'%host, shell=True)    

    ifresult.returncode==0:

        return'%s:up'%host

    else:

        return'%s:down'%host

# 测试代码块,__name__作为python文件调用时,执行该代码块

if__name__=='__main__':

    print(ping("127.0.0.1"))

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值