返回顶部
首页 > 资讯 > 后端开发 > Python >python subprocess模块
  • 549
分享到

python subprocess模块

模块pythonsubprocess 2023-01-31 06:01:55 549人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

subprocess模块 允许你生成一个或多个进程,并且可以跟它交互,并且获取返回的结果,这个模块想要替换掉几个老的方法: os.system os.spawn* 所以以后跟系统交互的命令,尽

subprocess模块

允许你生成一个或多个进程,并且可以跟它交互,并且获取返回的结果,这个模块想要替换掉几个老的方法:
        os.system
        os.spawn*
        所以以后跟系统交互的命令,尽量用subprocess

建议调用subprocess的run()方法去跟系统进行调用,更高级的方法,使用popen() ;run()方法其实就是封装的popen。

run()方法在python3.5才有,python2.x没有,2.x用subprocess.call(),当然Python3.X版本也支持call()

常见的subprocess方法

subprocess.call
    subprocess.call("df -lh",shell=True) 或者 subprocess.call(["df","-lh"])
    如果想获取到执行内容:
         a = subprocess.Popen("df -lh",shell=True,stdout=subprocess.PIPE)
         a.stdout.read()

subprocess.check_call
    执行命令,如果执行状态码是 0 ,则返回0,否则抛异常
    subprocess.check_call(["ls","-l"])
    subprocess.check_call("exit 1",shell=True)   抛出异常:subprocess.CalledProcessError:

subprocess.check_output
    执行命令,如果状态码是 0 ,则返回执行结果,否则抛异常
    subprocess.check_output(["echo","hello world!"])    返回:'hello world!\n'
    subprocess.check_output("exit 1",shell=True)        剖出异常:subprocess.CalledProcessError
    执行命令,并返回结果,注意是返回结果,不是打印,下例结果返回给res
    res = subprocess.getoutput("ls /bin/sh")
    res     输出:'/bin/sh'

subprocess.getstatusoutput
    接收字符串格式命令,返回元组形式,第1个元素是执行状态,第2个是命令结果
    subprocess.getstatusoutput("ls /bin/ls")        返回:(0, '/bin/ls')

subprocess.getoutput
    接收字符串格式命令,并返回结果
    subprocess.getoutput("ls /bin/ls")      返回:'/bin/ls'

上边的subprocess方法,底层都是封装的subprocessPopen

subprocess的其他解说:

poll()
    Check if child process has terminated. Returns returncode
wait()
    Wait for child process to terminate. Returns returncode attribute.

terminate() 杀掉所启动进程
communicate() 等待任务结束

stdin 标准输入
stdout 标准输出
stderr 标准错误

pid
    The process ID of the child process.

Popen例子:
    p = subprocess.Popen("df -lh|grep root",stdin=subproce
    p.stdout.read()     输出:b'/dev/mapper/cl-root   38G  5.7G   32G  16% /\n'

run()方法的使用:

    subprocess.run(["ls","-lh"])
    subprocess.run("exit 1",shell=True,check=True)  抛出异常:subprocess.CalledProcessError
    subprocess.run(["ls","-l","/dev/null"],stdout=subprocess.PIPE) 输出:
    如下:CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw-. 1 root root 1, 3 Jan  3 11:16 /dev/null\n')

调用和系统之间的操作,推荐subprocess.run() ,因为它迟早要替换掉sys.system ;
run()方法可以满足大部分的需求,如果要进行一些复杂的交互的话,还可以用subprocessPopen()
如:
    p = subprocess.Popen("find / -size +1000000 -exec ls -shl {} \;",shell=True,stdout=subprocess.PIPE)
    print (p.stdout.read())
    输出:b'0 -r--------. 1 root root 128T Jan 23 14:58 /proc/kcore\n1.9G -rw-------. 1 root root 100G Jan  8 17:48 /var/lib/Docker/devicemapper/devicemapper/data\n3.8M -rw-------. 1 root root 2.0G Jan  8 17:48 /var/lib/docker/devicemapper/devicemapper/metadata\n'

subprocess.Popen(...)

    用于执行复杂的系统命令

    参数:
    args:shell命令,可以是字符串或者序列类型(如:list,元组)
    bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲
    stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
    preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
    close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。
    所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。
    shell:同上
    cwd:用于设置子进程的当前目录
    env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
    universal_newlines:不同系统的换行符不同,True -> 同意使用 \n
    startupinfo与createionflags只在windows下有效
    将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等

终端输入的命令分为两种:
    输入即可得到输出:如 ifocnfig
    输入进行某环境,依赖某环境再输入:如 python

需要交互的命令示例:
    import subprocess
    obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    obj.stdin.write('print 1 \n ')
    obj.stdin.write('print 2 \n ')
    obj.stdin.write('print 3 \n ')  #当从这里开始就报错了。
    obj.stdin.write('print 4 \n ')

    out_error_list = obj.communicate("timeout=10")
    print out_error_list
    输出:
        ('', '  File "<stdin>", line 2\n    print 2 \n    ^\nIndentationError: unexpected indent\n')

subprocess实现iptables 清规则的时候 sudo 自动输入密码

    import subprocess
    def mypass():
        mypass = '123'  # or get the passWord from anywhere
        return mypass
    echo = subprocess.Popen(['echo', mypass()],
                            stdout=subprocess.PIPE,
                            )
    sudo = subprocess.Popen(['sudo', '-S', 'iptables', '-L'],
                            stdin=echo.stdout,
                            stdout=subprocess.PIPE,
                            )
    end_of_pipe = sudo.stdout

    print ("Password ok \n Iptables Chains %s" % end_of_pipe.read())

--结束END--

本文标题: python subprocess模块

本文链接: https://lsjlt.com/news/190547.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python模块--subprocess
    subprocess模块                                                                                                            ...
    99+
    2023-01-31
    模块 python subprocess
  • python subprocess模块
    subprocess模块 允许你生成一个或多个进程,并且可以跟它交互,并且获取返回的结果,这个模块想要替换掉几个老的方法: os.system os.spawn* 所以以后跟系统交互的命令,尽...
    99+
    2023-01-31
    模块 python subprocess
  • python的subprocess模块
    1 os与commands模块​2 subprocess模块​3 subprocess.Popen类 我们几乎可以在任何操作系统上通过命令行指令与操作系统进行交互,比如Linux平台下的shell。​​那么我们如何通过Python来完成这些...
    99+
    2023-01-31
    模块 python subprocess
  • python模块之subprocess
    subprocess.run() 运行并等待args参数指定的指令完成,返回CompletedProcess实例。 参数:(*popenargs, input=None, capture_output=False, timeout=Non...
    99+
    2023-01-31
    模块 python subprocess
  • Python之Subprocess模块
    前言其实有一个模块也支持执行系统命令,那个模块就是sys.system,但他执行系统命令会直接通过主进程去执行命令,那假如,该命令的执行需要耗费一个小时,那么主进程会卡一个小时,而不会去干别的事,这样就会导致程序的运行效率低下。 如果由su...
    99+
    2023-01-31
    模块 Python Subprocess
  • Python中的Subprocess模块
    原文出处:https://segmentfault.com/a/1190000009176351以前我一直用os.system()处理一些系统管理任务,因为我认为那是运行linux命令最简单的方式.我们能从Python官方文档里读到应该用s...
    99+
    2023-01-31
    模块 Python Subprocess
  • Python基础之hashlib模块subprocess模块logging模块
    目录一、hashlib模块基本操作与用法二、subprocess模块简介基本操作与用法三、logging模块简介基本操作与用法一、hashlib模块 什么是哈希模块: hashlib...
    99+
    2024-04-02
  • subprocess—Python多进程模块
    subprocess—Python多进程模块 1.概述 这篇文章介绍并行运算中的subprocess模块,subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取...
    99+
    2023-09-03
    python linux 运维
  • Python hashlib模块与subprocess模块使用详细介绍
    目录1、什么是哈希hash2、hash的用途3、如何用4、subprocess模块1、什么是哈希hash hash一类算法,该算法接受传入的内容,经过运算得到一串hash值 hash...
    99+
    2024-04-02
  • python的subprocess模块有什么功能
    Python的subprocess模块允许你创建新的进程、连接到它们的输入/输出/错误管道,并获取它们的返回代码。该模块提供了一种简...
    99+
    2024-04-02
  • python subprocess模块怎么安装和使用
    要安装subprocess模块,你不需要单独安装它,因为它是Python的内置模块之一。只需确保你的Python版本是3.0以上。 ...
    99+
    2024-02-29
    python subprocess
  • Python3 subprocess模块怎么使用
    本篇内容介绍了“Python3 subprocess模块怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!从python2.4版本开始,...
    99+
    2023-06-27
  • python中subprocess模块subprocess.run,subprocess.getoutput,subprocess.Popen、subprocess.call的使用
    subprocess可以帮我们执行命令,获取执行结果及返回内容。 1、subprocess.run() 此方法为python3.5版本后的推荐方法,可以获取执行结果、返回内容等一些常用的信息, 满足大...
    99+
    2023-09-01
    python linux 运维
  • 一文搞懂Python中subprocess模块的使用
    目录简介常用方法和接口subprocess.run()解析subprocess.Popen()解析Popen 对象方法subprocess.run()案例subprocess.cal...
    99+
    2022-11-21
    Python subprocess模块使用 Python subprocess模块 Python subprocess
  • Python移动测试开发subprocess模块项目实战
    目录一、背景二、subprocess 模块基础1. subprocess.run 方法2. subprocess.Popen 方法3. run 与 Popen 的同步/异步对比实验三...
    99+
    2024-04-02
  • python调用subprocess模块实现命令行操作控制SVN的方法
    使用python的subprocess模块实现对SVN的相关操作。 设置GitSvn类,在该类下自定义执行SVN常规操作的方法。 SVN的常规操作包括:(1)获取SVN当前版本,通过...
    99+
    2024-04-02
  • Python模块:time模块
    time模块:python中处理时间的基础模块,有时间戳,元组,自定义,三种时间表现形式。python中时间戳的值是以1970年1月1日0点开始计算的,单位是秒。时间戳:就是两个时间差的数值。时区:传说中在开发服务器/客户端程序时,时区不一...
    99+
    2023-01-31
    模块 Python time
  • python模块:smtplib模块
    1.使用本地的sendmail协议进行邮件发送格式(1):smtpObj=smtplib.SMTP([host [,port [,local_hostname]]])host:SMTP服务器主机的IP地址或者是域名port:服务的端口号(默...
    99+
    2023-01-31
    模块 python smtplib
  • python—subprocess、gl
    一、subprocess模块1.subprocess以及常用的封装函数运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中,我们通过...
    99+
    2023-01-31
    python subprocess gl
  • python中的subprocess
     python2.7 源码中的注释(由于能力有限,翻译的不太准确): 这个模块允许您开启进程、连接输入、输出和错误的管道,并获取他们的返回代码。这个模块计划替代一些旧代码,如: os.system、os.spawn*、os.Popen、po...
    99+
    2023-01-31
    python subprocess
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作