【Python】基础部分 -- 常用模块 -- subprocess 通过系统命令执行子程序

 subprocess  通过系统命令执行子程序

1)   说明

执行系统命令同时获得命令结果

 

执行命令的方法

popenargs = ['ping','127.1.0.0']
kwargs = {}
subprocess.run(popenargs, input=None, timeout=None, check=False, **kwargs)  # 官方推荐
subprocess.call(popenargs, timeout=None, **kwargs)  # 与上一条差不多
# subprocess.Popen()  # 上面各种方法的底层封装

 

2)   run方法

*标准写法

a=subprocess.run(['df','-h'],stderr=subprocess.PIPE,stdout=subprocess.PIPE,check=True)

a.stdout()

stdout、stderr为管道给程序传递数据

*带管道符的命令

subprocess.run('df -h|grep disk1',shell=True) #命令直接交给shell处理

 

3)   call方法 (略)

 

4)   Popen方法

     *参数

args : shell 命令, 可以是字符串或者序列类型 (如:list, 元组)

stdin,stdout,stderr: 分别表示程序的标准输入、输出、错误句柄

preexec_fn: 只在unix平台下有效,用于指定一个可执行对象(callable object),它将在  之前被调用

shell: 同上

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

env: 用于指定子进程的环境变量.如果env = None,子进程的环境变量将从父进程中继承

      

     *区别

a = subprocess.run(...)

a = subprocess.Popen(...)

run会导致进程阻塞,popen会生成独立进程执行系统命令

 

     *Popen的其他方法

print(
'\nterminate',subprocess.Popen.terminate(a), # 给子进程发送终止信号,非强制性 SIGTERM
'\npoll',subprocess.Popen.poll(a) , # 检查子进程是否终止,有延迟
'\nwait',subprocess.Popen.wait(a)  ,# 等待子进程终止,
'\nkill',subprocess.Popen.kill(a) , # 强制终止 SIGKILL
# subprocess.Popen.communicate(b'hahaha') , # 与启动的进程进行交互,发送数据到stdin,并从stdout接收输出,只能交互一次
# subprocess.Popen.send_signal(signal.SIGKILL) , # 发送系统信号,如signal.SIGKILL
)

系统输入pid 获取子进程的进程号

posted @ 2018-05-31 18:10  caya  阅读(161)  评论(0编辑  收藏  举报