我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python subprocess模块

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python subprocess模块

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())

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python subprocess模块

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python模块--subprocess

subprocess模块                                                                                                            
2023-01-31

python subprocess模块

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

python的subprocess模块

1 os与commands模块​2 subprocess模块​3 subprocess.Popen类我们几乎可以在任何操作系统上通过命令行指令与操作系统进行交互,比如Linux平台下的shell。​​那么我们如何通过Python来完成这些命
2023-01-31

Python之Subprocess模块

前言其实有一个模块也支持执行系统命令,那个模块就是sys.system,但他执行系统命令会直接通过主进程去执行命令,那假如,该命令的执行需要耗费一个小时,那么主进程会卡一个小时,而不会去干别的事,这样就会导致程序的运行效率低下。如果由sub
2023-01-31

python模块之subprocess

subprocess.run()运行并等待args参数指定的指令完成,返回CompletedProcess实例。参数:(*popenargs, input=None, capture_output=False, timeout=None,
2023-01-31

Python中的Subprocess模块

原文出处:https://segmentfault.com/a/1190000009176351以前我一直用os.system()处理一些系统管理任务,因为我认为那是运行linux命令最简单的方式.我们能从Python官方文档里读到应该用s
2023-01-31

python subprocess模块怎么安装和使用

要安装subprocess模块,你不需要单独安装它,因为它是Python的内置模块之一。只需确保你的Python版本是3.0以上。要使用subprocess模块,可以按照以下步骤进行操作:导入subprocess模块:import sub
python subprocess模块怎么安装和使用
2024-02-29

Python3 subprocess模块怎么使用

本篇内容介绍了“Python3 subprocess模块怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!从python2.4版本开始,
2023-06-27

一文搞懂Python中subprocess模块的使用

subprocess是子流程,即进程的意思,该模块可以启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。本文将和大家聊聊subprocess模块的使用,需要的可以参考一下
2022-11-21

python模块:smtplib模块

1.使用本地的sendmail协议进行邮件发送格式(1):smtpObj=smtplib.SMTP([host [,port [,local_hostname]]])host:SMTP服务器主机的IP地址或者是域名port:服务的端口号(默
2023-01-31

Python模块:time模块

time模块:python中处理时间的基础模块,有时间戳,元组,自定义,三种时间表现形式。python中时间戳的值是以1970年1月1日0点开始计算的,单位是秒。时间戳:就是两个时间差的数值。时区:传说中在开发服务器/客户端程序时,时区不一
2023-01-31

python—subprocess、gl

一、subprocess模块1.subprocess以及常用的封装函数运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中,我们通过
2023-01-31

python中的subprocess

python2.7 源码中的注释(由于能力有限,翻译的不太准确):这个模块允许您开启进程、连接输入、输出和错误的管道,并获取他们的返回代码。这个模块计划替代一些旧代码,如:os.system、os.spawn*、os.Popen、popen
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录