Python之Subprocess模块

PS:打开文件时候加b参数是代表以二进制方式打开,在Linux加不加都可以,在windows上面最好加b参数否则可能会出现问题

使用system返回执行结果不赋值,使用popen返回了结果赋值给cmd_res  popen是被废弃的命令了

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

import subprocess

 subprocess.call(["ls","-l"],shell=False)                     一个参数就是一个值需要用引号包括 最好使用这种方法 (有些处理不了比如管道|)

subprocess.call("ls -l",shell=True)           shell=True使用shell原生实现,直接一个字符串 有些命令不是python原生的只能使用这种方法(这种也危险比如用户输入rm -rf)

这个执行结果是无法保存的

 res=subprocess.call(["ls","-l"],shell=False)

res

0

check_call如果执行状态码是0则返回0,否则抛异常,结果在屏幕显示

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

在python内部启动一个python进程

t=subprocess.Popen(["python"],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)

PS:其实stdin stdout stderr不是必须加的 需要交换才加入标准输入,标准输出,标准错误 如果直接t = subprocess.Popen(["python"])

会在本交互界面在生成一个交换界面会出现输入失败的情况,不需要交互就按上面只有输入.

查看id

在linux界面查看

t.terminate()  杀掉子进程

defunct代表进程变成了僵尸进程,主进程与子进程失去了联系

资源没有得到释放

t.wait() 释放资源

help(t.wait)

查看wait方法显示是在等待子进程终结

原文地址:https://www.cnblogs.com/minseo/p/6860648.html