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方法显示是在等待子进程终结