subprocess库可以代替os.system,可以获取执行的子进程的输出
#coding=utf-8
import subprocess as sp
import time
# 1.shell为true表示使用shell执行
sp.Popen('DIR', shell=True)
sp.Popen('DIR') #会报错
sp.Popen('cmd /k dir')
# 2.communicate获取子进程返回信息
s=sp.Popen('taskkill /F /IM chromedriver.exe',shell=True,stdout=sp.PIPE)
s=sp.returncode #0表示执行成功
#print(s.communicate()) #返回元组
也可以用s=sp.Popen('taskkill /F /IM chromedriver.exe',shell=True,stdout=sp.PIPE).stdout.readlines()获取
#获取err信息
s=sp.Popen('taskkill /F /IM chromedriver.exe',shell=True,stdout=sp.PIPE,stderr=sp.PIPE).stderr.readlines()
print(s.communicate()[0].decode('gbk')) #成功: 已终止进程 "chromedriver.exe",其 PID 为 6316。
s.wait() #等待子进程返回
s.poll() #返回状态,没返回为NONE,成功为0
# 如
cmd='ping /n 5 127.0.1>nul'
sp.Popen(cmd,shell=True)
while True:
s.wait()
time.sleep(1)
if s.poll()==0:
break
# 3.使用check_output直接获取进程返回值及信息,如不为0则抛出CalledProcessError异常
try:
sp.check_output(cmd)
except sp.CalledProcessError:
pass
else:
print('执行成功')
# 4,第一个参数可以是一个列表
sp.Popen(['NOTEPAD.EXE','test.txt']) #后面还可以加参数,如启动的参数等等
# 5使用call阻塞
sp.call(cmd,shell=True)
网友评论