关于subprocess模块,大致需要看三篇文章:
- https://www.jianshu.com/p/2eb33b491024 # 力荐这篇
- https://www.runoob.com/w3cnote/python3-subprocess.html
- https://blog.csdn.net/imzoer/article/details/8678029
示例代码
如果想得到进程的输出,管道(subprocess.PIPE)是个很方便的方法,这样:
import time
import subprocess
def cmd(command):
subp = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding="utf-8")
subp.wait(2)
# # 上面等待2个时间单位是为了让poll()返回returncode,因为如果子进程没执行结束,poll()返回的是none
if subp.poll() == 0:
print(subp.communicate()[0]) # subp.communicate()返回的是一个tuple,形式为 (stdoutput,erroutput)
# 注意:communicate()是Popen对象的一个方法,该方法会阻塞父进程,直到子进程完成.
else:
print("失败")
cmd("java --version")
cmd("exit 1")
结果如下:
p=subprocess.Popen("dir", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(stdoutput,erroutput) = p.communicate()
p.communicate会一直等到进程退出,并将标准输出和标准错误输出返回,这样就可以得到子进程的输出了。