python基础学习日志day5--subprocess模块

可以执行shell命令的相关模块和函数有:

  • os.system
  • os.spawn*
  • os.popen*          --废弃
  • popen2.*           --废弃
  • commands.*      --废弃,3.x中被移除

以上执行shell命令的相关的模块和函数的功能均在 subprocess 模块中实现,并提供了更丰富的功能

call

父进程等待子进程完成
返回退出信息(returncode,相当于Linux exit code)

执行命令,返回状态码,shell=True是表示命令可以字符串

>>> import subprocess
>>> ret=subprocess.call(["ls","-l"],shell=False)
total 4
-rw-r--r--. 1 root root 260 Feb 23 20:44 scrapy.cfg
drwxr-xr-x. 4 root root 156 Feb 25 20:05 sokindle
>>> ret=subprocess.call("ls -l",shell=True)
total 4
-rw-r--r--. 1 root root 260 Feb 23 20:44 scrapy.cfg
drwxr-xr-x. 4 root root 156 Feb 25 20:05 sokindle

check_call

父进程等待子进程完成
返回0
检查退出信息,如果returncode不为0,则举出错误subprocess.CalledProcessError,该对象包含有returncode属性,可用try…except…来检查

shell默认为False,在Linux下,shell=False时, Popen调用os.execvp()执行args指定的程序;shell=True时,如果args是字符串,Popen直接调用系统的Shell来执行args指定的程序,如果args是一个序列,则args的第一项是定义程序命令字符串,其它项是调用系统Shell时的附加参数。

>>> ret=subprocess.check_call(["ls","-l"])
total 4
-rw-r--r--. 1 root root 260 Feb 23 20:44 scrapy.cfg
drwxr-xr-x. 4 root root 156 Feb 25 20:05 sokindle
>>> print(ret)
0
>>> subprocess.check_call("exit 1",shell=True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/python36/lib/python3.6/subprocess.py", line 291, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command ‘exit 1‘ returned non-zero exit status 1.
>>> subprocess.call("exit 1",shell=True)
1
>>> 

check_output,类似check_call

执行命令,如果状态码是 0 ,则返回执行结果,否则抛异常

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()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等
>>> import subprocess
>>> subprocess.Popen(["mkdir","t1"])
<subprocess.Popen object at 0x7f7419f0fac8>
>>> ret1=subprocess.Popen(["mkdir","t1"])
>>> mkdir: cannot create directory ‘t1’: File exists

>>> ret2=subprocess.Popen("mkdir t2",shell=True)
>>> ret2=subprocess.Popen("ls -l",shell=True)
>>> total 4
-rw-r--r--. 1 root root 260 Feb 23 20:44 scrapy.cfg
drwxr-xr-x. 4 root root 156 Feb 25 20:05 sokindle
drwxr-xr-x. 2 root root   6 May 25 21:29 t1
drwxr-xr-x. 2 root root   6 May 25 21:30 t2
>>> obj = subprocess.Popen("mkdir t3", shell=True, cwd=‘/home/‘,)
>>> obj = subprocess.Popen("ls -l",shell=True,cwd=‘/home‘,)
>>> total 23464
drwxr-xr-x.  5 root root       59 Mar  5 17:18 crawl
drwxr-xr-x.  3 root root       38 Feb 19 11:40 douban
drwxr-xr-x.  3 root root       39 Mar  1 20:52 douban2
drwxr-xr-x.  5 root root      159 Aug 17  2016 features
drwxr-xr-x.  3 root root       18 Feb 25 19:52 images
drwx------. 14 lx   lx       4096 Mar  2 20:59 lx
drwxr-xr-x. 22 root root     4096 Aug 17  2016 plugins
-rw-r--r--.  1 root root 24015561 Mar  7 20:53 PyDev_5.2.0.zip
drwxr-xr-x.  4 root root       78 May 13 21:52 python
drwxr-xr-x.  2 root root        6 Feb 16 20:22 python36
drwxr-xr-x.  5 root root       60 May 25 21:30 sokindle
drwxr-xr-x.  2 root root        6 May 25 21:36 t3
drwxr-xr-x.  3 root root      122 Feb 17 21:13 tutorial
时间: 2024-12-20 13:30:14

python基础学习日志day5--subprocess模块的相关文章

python基础学习日志day5

学习内容 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式 一:模块介绍 模块分为三种: 自定义模块 内置标准模块(又称标准库) 开源模块 自定义模块使用 # -*- coding:utf-8 -*- __author__ = 'shisanjun' """ d

PYTHON基础学习日志DAY5-time &amp;datetime模块

在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平台可能有所不同.UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间.在中国为UTC+8.DST(Daylight Saving Time)即夏令时.时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算

python基础学习日志day5-各模块文章导航

python基础学习日志day5---模块使用 http://www.cnblogs.com/lixiang1013/p/6832475.html python基础学习日志day5---time和datetime模块 http://www.cnblogs.com/lixiang1013/p/6848245.html python基础学习日志day5---random模块http://www.cnblogs.com/lixiang1013/p/6849162.html python基础学习日志da

python基础学习日志day5---logging模块

很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug(), info(), warning(), error() and critical() 5个级别,下面我们看一下怎么用. 最简单用法 1 2 3 4 5 6 7 8 import logging logging.warning("user [alex] attempt

python基础学习日志day5--hashlib模块

hashlib模块用于加密操作,代替了md5和sha模块, 主要提供SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法. # -*- coding:utf-8 -*- __author__ = 'shisanjun' import hashlib m=hashlib.md5() #使用MD5算法 m.update(b"hello") #必须加b,申明为byte m.update(b"It is me") print(m.dige

python基础学习日志day5---os模块

python os模块提供对操作系统进行调用的接口. # -*- coding:utf-8 -*-__author__ = 'shisanjun' import os print(os.getcwd())#获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("F:\python运维开发\day4")#改变当前的工作目录:相当于shell下cdprint(os.getcwd())#结果F:\python运维开发\day4 os.chdir(os.curdir)#返回

python基础学习日志day5--re模块

常用正则表达式符号 '.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE) '$' 匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以 '*' 匹

python基础学习日志day5---random模块

python使用random生成随机数 下面是主要函数random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0random.randint(a, b)生成的随机数n: a <= n <= b包括下限random.randrange([start], stop[, step]),从指定范围内,按指定基数递增的集合中 获取一个随机数.不包括下限random.choice从序列中获取一个随机元素 # -*- coding:utf-8 -*- __autho

python基础学习日志day5---xml和configparse模块

1)XML模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多. 下面是xml的遍历查询删除修改和生成 # -*- coding:utf-8 -*- __author__ = 'shisanjun' import xml.etree.ElementTree as ET etree=ET.parse("xml.xml") root=etree.getroot() #遍历XML for child in root: print(child.tag,child.attri