python模块--subprocess-创新互联

subprocess模块      

创新互联公司-专业网站定制、快速模板网站建设、高性价比兴和网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式兴和网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖兴和地区。费用合理售后完善,10余年实体公司更值得信赖。

    subprocess模块用于帮助我们在python代码中去执行一些系统命令,在执行python程序时,该模块会创建出一个子进程,来运行外部程序。

    该模块拥有多个方法,具体如下:

  • subprocess.call()
    直接打印系统命令的执行结果,如果执行成功,返回状态码为0,否则为1,例如:

#执行成功 import subprocess CALL1 = subprocess.call('ping 127.0.0.1 -n 1',shell=True) print("Returncode:%d"%CALL1)

打印结果为:

正在 Ping 127.0.0.1 具有 32 字节的数据: 来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128 127.0.0.1 的 Ping 统计信息:     数据包: 已发送 = 1,已接收 = 1,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位):     最短 = 0ms,最长 = 0ms,平均 = 0ms Returncode:0#执行失败 CALL2 = subprocess.call('ping 1.1.1.2 -n 1',shell=True) print("Returncode:%d"%CALL2)

打印结果为:

正在 Ping 1.1.1.2 具有 32 字节的数据: 请求超时。 1.1.1.2 的 Ping 统计信息:     数据包: 已发送 = 1,已接收 = 0,丢失 = 1 (100% 丢失), Returncode:1

  • subprocess.check_call()
    直接打印系统命令的执行结果,使用方法与subprocess.call()相同,只不过该函数会检测返回状态码,如果为1,则会抛出subprocess.CalledProcessError错误,例如:

import subprocess # 执行成功 # CHECK_CALL1 = subprocess.check_call('ping 127.0.0.1 -n 1',shell=True) # print(CHECK_CALL1) # 执行失败 CHECK_CALL2 = subprocess.check_call('ping 1.1.1.2 -n 1',shell=True) print(CHECK_CALL2)

打印结果为:

正在 Ping 1.1.1.2 具有 32 字节的数据: 请求超时。 1.1.1.2 的 Ping 统计信息:     数据包: 已发送 = 1,已接收 = 0,丢失 = 1 (100% 丢失), Traceback (most recent call last):   File "C:/Users/Administrator/PycharmProjects/first/subprocess/check_call.py", line 7, in      CHECK_CALL2 = subprocess.check_call('ping 1.1.1.2 -n 1',shell=True)   File "C:\Python3.6\lib\subprocess.py", line 291, in check_call     raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command 'ping 1.1.1.2 -n 1' returned non-zero exit status 1.

可以结合try...expect...语句做异常处理。

  • subprocess.check_output()

    不会将系统命令的执行结果直接打印出来,返回一个bytes类型的对象,该对象包含了系统命令的执行结果,如果执行失败会抛出subprocess.CalledProcessError错误,例如:

import subprocess #执行成功 CHECK_OUTPUT1 = subprocess.check_output('ping 127.0.0.1 -n 1',shell=True) print(type(CHECK_OUTPUT1)) print(str(CHECK_OUTPUT1,'gbk'))

打印结果为:

正在 Ping 127.0.0.1 具有 32 字节的数据: 来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128 127.0.0.1 的 Ping 统计信息:     数据包: 已发送 = 1,已接收 = 1,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位):     最短 = 0ms,最长 = 0ms,平均 = 0ms

  • subprocess.Popen()

    上面几个函数都是Popen()的封装,主进程都会等待子进程执行完毕,Popen()创建的子进程不会被等待,相当于异步执行。

  1.Popen()创建的对象有多个方法,可以针对子进程执行个性化操作,例如:

import subprocess import time time.clock() POPEN1 = subprocess.Popen('ping 127.0.0.1 -n 10',shell=True) print(POPEN1) print(time.clock())

打印结果为:

0.06108553745727746 #从时间上看,主程序很快就结束了

Popen()创建的对象方法包括:

POPEN1.poll() # 检查子进程状态 POPEN1.kill() # 终止子进程 POPEN1.terminate() # 终止子进程 POPEN1.send_signal() # 向子进程发送信号 pid属性包含了子进程的pid号

  2.subprocess.Popen()另一个常用的功能是文本流控制,对应的"标准输入"、"标准输出"、"标准错误"分别是:

POPEN1.stdin POPEN1.stdout POPEN1.stderr

subprocess.PIPE(为文本流提供一个缓存区)作为管道,可以用来连接标准输出和标准输入,例如:

POPEN2 = subprocess.Popen('ping 127.0.0.1 -n 1',shell=True,stdout=subprocess.PIPE) STDOUT2 = POPEN2.stdout # print(str(STDOUT2.read(),'gbk')) POPEN3 = subprocess.Popen('findstr 数据包',shell=True,stdin=STDOUT2,stdout=subprocess.PIPE) STDOUT3 = POPEN3.stdout print(str(STDOUT3.read(),'gbk'))

执行结果为:

数据包: 已发送 = 1,已接收 = 1,丢失 = 0 (0% 丢失),

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:python模块--subprocess-创新互联
当前地址:http://scyanting.com/article/coeijp.html