subprocess模块详解2

1.call() 和run功能类似,都是接受一个列表里的参数。

>>> import subprocess
>>> a = subprocess.call(["control"])

 

2.返回值不为0,程序会报错

>>> subprocess.check_call(["control"])

 

3.接受一个字符串命令,返回一个元组,第一个是执行状态,第二个是命令结果。

>>> subprocess.getstatusoutput("control")
(1, '')

 

4.接受字符串命令,并返回结果  

>>> subprocess.getoutput()

 

5.返回结果给res,执行状态不为0会报错。注意:不是打印结果,是返回命令结果给res。

>>>res = subprocess.check_output("control")

 

6.用run执行“sleep 10” 系统会停止10s去执行程序。因为系统调用run方法,run方法会停留在主程序,直到执行完成,主程序才会继续下去。

>>> subprocess.run("sleep 10",shell = True,stderr = subprocess.PIPE,stdout = subprocess.PIPE)a.

a.poll() 查看执行状态,执行结束了会返回执行状态。Popen执行命令不会影响主程序,系统调用Popen,Popen会发起一个新进程,新进程会执行命令,主程序还会继续运行下去,新进程执行完毕会把结果返回给主程序。同时,用a.poll()还可以随时查看新进程的执行状态。Popen是run封装的一个模块。

>>> a = subprocess.Popen("sleep 10",shell = True,stderr = subprocess.PIPE,stdout = subprocess.PIPE)

  

7.preexec_fn ,只在Unix平台下有效,用于指定一个可执行对象,他将在新进程执行之前执行。

 >>> a = subprocess.Popen("sleep 10",shell = True,stderr = subprocess.PIPE,stdout = subprocess.PIPE,preexec_fn = say)

 cwd  用于设置子进程的当前目录

>>> a = subprocess.Popen("sleep 10",shell = True,cwd =r" C:\Users\LENOVO\Desktop\12",stderr = subprocess.PIPE,stdout = subprocess.PIPE,preexec_fn = sayhi)

 env 设置子进程的环境变量

 

8.a.wait()  主程序需要结果,不往下继续运行,就用wait()

 

9.terminate()终止所启动的进程  

a.pid 获取进程号

 

10.kill() 杀死所启动的进程

 

11.communicate() 与启动的进程交互,只能交互一次,多了个stdin(标准输入)

>>> a = subprocess.Popen(" file.py",shell = True,stderr = subprocess.PIPE,stdout = subprocess.PIPE,stdin = subprocess.PIPE)

 

12.a.send_signal(signal.xxx) 给系统发信号

 

 

  

  

 

  

posted @ 2018-04-19 14:11  Roc_Atlantis  阅读(166)  评论(0编辑  收藏  举报