美文网首页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