美文网首页Python基础
Python模块·Subprocess子进程

Python模块·Subprocess子进程

作者: 技术老男孩 | 来源:发表于2022-12-31 09:35 被阅读0次

一、Subprocess模块的定义:

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

补充:

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

二、常用方法:subprocess.run()

  • command是命令
  • parameter是命令所需要的参数
分类 函数 / 方法 说明
运行
无参命令
subprocess.run(["command"]) 中括号可加可不加
subprocess.run(“command”,Shell=True) Shell=True可加可不加
运行
有参命令
subprocess.run(["command",“parameter”]) 必须添加中括号,参数可以为多个
subprocess.run(“command parameter”,Shell=True) 可以将命令完整写入
但是需要添加Shell=True来支持shell语法

三、run 方法返回值:

  • run方法返回值:CompletedProcess(args='..', returncode=0)
  • args:run函数执行的命令
  • returncode:类似于$?,执行成功返回0,否则为非0
>>> 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'

四、实操训练题:

需求:

  • 编写ping函数
  • 用于测试远程主机的联通性
  • ping 通显示:x.x.x.x:up
  • ping 不通显示:x.x.x.x:down
# 判断是否可以ping通的函数
def check_ping(ip_addresses):
    data = subprocess.run(f"ping -c 2 {ip_addresses} &> /dev/null", shell=True)
    if data.returncode == 0:
        return True
    return False

# 打印ping list 的结果状态
def check_pings(ip_lists):
    for ip in ip_lists:
        if check_ping(ip):
            print(ip, "up")
        else:
            print(ip, "down")

# 初始化
if __name__ == '__main__':
    ip_list = ["192.168.99.100", "192.168.88.10", "192.168.88.210",
               "192.168.88.100", "192.168.88.5", "192.168.88.15",
               "www.baidu.com", "www.yahu.com", "www.douyin.com",
               "www.qq.com", "www.163.com", "www.wangyi.com"]
    check_pings(ip_list)

相关文章

网友评论

    本文标题:Python模块·Subprocess子进程

    本文链接:https://www.haomeiwen.com/subject/nuiuqdtx.html