Popen方法
import subprocess, sys
p1 = subprocess.Popen('ping 127.0.0.1'.split(),
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
# Popen构造一个新进程,启动其它程序,第一个参数由元组或列表提供,包括了命令和命令的参数。
# stdin、stdout 输入输出的标准。
# p1.wait() # 如果此处没有调用wait()方法,那 下面的 print(11111)是在p1执行时,马上接着执行的。
# print(11111) # 如果调用了 wait()方法,则在p1结束后,再运行 print()。
output, err = p1.communicate() # communicate()控制输入输出,结果返回一个元组(stdout, stderr)。
sys_encode = sys.stdout.encoding # 获取操作系统的默认编码。
print('p1', output.decode(sys_encode)) # 获取输出的内容,因为是字节码,所以得得重新解码。
print('Exit code:', p1.returncode) # p.returncode ==》p的退出状态码。
p = subprocess.Popen('ping 126.com'.split())
print(p.poll()) # poll 查看进程是否还在运行,如果还在运行返回None。如果正常结束返回0,错误中止通常为1。
print(p.wait()) # 等待进程结束,可以传入一个timeout的参数=等待的时长。返回进程的结束状态码。和join类似。
打开其他程序
p = subprocess.Popen(['程序A', '文件B']) # 即用 程序A 来打开 文件B。
p = subprocess.Popen(['start', '文件B'], shell=True) # 调用系统默认程序打开 文件B, start是windows的shell命令,其他系统有open,see。
getoutput、getstatusoutput、call方法
p2 = subprocess.getoutput('ping 127.0.0.1')
# getoutput 的参数是一个字符串,可以表示一个完整的shell命令。在shell中打开命令,并获取它的输出。
print('p2', p2) # 返回值也是字符串。
p3 = subprocess.getstatusoutput('ping 127.0.0.1')
# getstatusoutput 获取状态码,和输出内容。
print('p3:状态码为{}, 内容为:{}'.format(p3[0], p3[1]))
p4 = subprocess.call('ping 127.0.0.1') # 结果打印到控制台上
print('p4', p4)