zoukankan      html  css  js  c++  java
  • 常用模块之subprocess模块

    subprocess模块的主要用来取代 一些旧的模块方法:os.systerm,os.popen...

    三种主要的方法:

    subprocess.run(*popenargs,input= None,timeout=None...)

    subprocess.call(*popenargs,timeout=None,**kwargs)

    subprocess.popen()#上面两种方法的底层封装

    subprocess.call():执行命令,并返回执行状态,其中shell参数为False时,命令需要通过列表的方式传入。当shell的参数为True时,可直接传入命令。

    a = subprocess.call(['df','-hT'],shell=False)
    
    
    a = subprocess.call('df -hT',shell=True)

    subprocess.popen():

    在此复杂的场景中,我们需要将一个进程的执行输出作为另一个进程的输入,在另一个场景中,我们需要先进入到某个输入环境,然后再执行一系列的指令。

    subprocess.popen()方法有以下参数:

    args:shell命令,可以是字符串,或者序列类型,如list,tuple。

    bufsize:缓冲区大小,可不用关心

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

    shell:与上面方法中用法相同

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

    env:用于指定子进程的环境变量。如果env=None,则默认从父进程继承环境变量

    在/root下创建一个suprocesstest的目录:

    a = subprocess.Popen('mkdir subprocesstest',shell=True,cwd='/root')

    **将一个子进程的输出,作为另一个子进程的输入;

    import subprocess
    child1 = subprocess.Popen(["cat","/etc/passwd"], stdout=subprocess.PIPE)
    child2 = subprocess.Popen(["grep","0:0"],stdin=child1.stdout, stdout=subprocess.PIPE)
    out = child2.communicate()
    a= subprocess.run('sleep 10',shell = True,stdout = subprocess.PIPE)
    
    a= subprocess.Popen('sleep 10',shell = True,stdout = subprocess.PIPE)

    |----->的区别是:popen发出的命令后立即执行程序,不等子进程的结果。它是另开一个窗口来执行,而当前的程序继续执行

    a.poll()方法:是显示执行结果。

    a.pid()方法:是显示进程号。

    wait()方法:等待子进程的结果

    (在linux中kill(杀死进程)是给cpu发信号,让停止某个进程)---》在python中起到相同作用的是a.terminate()和a.kill(),后着是强制性。

    communicate()与启动的进程交互,发送数据到stdin,并从stdout接受输出,然后等待任务结束

    a = subprocess.Popen('python3 guess_age.py',sehll = True,stderr = subprocess.PIPE,stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    a.communecate(b'22') #根据communicate的工作机制,它只能执行一次

    a.send_signal(*):给进程发信号。

    当信号为*为singnal.SIGKILL时,进程会停止

  • 相关阅读:
    memcache安装 基于Red Hat 7.4
    LNMP源码编译
    LAMP源码编译
    Red Hat 7.4 安装laravel框架 基于xampp集成环境
    PHP 扩展开发检测清单(扩展开发必读)
    20 个 Laravel Eloquent 必备的实用技巧
    [项目推荐] Corcel 让你在 WordPress 中使用 Laravel
    Tumblr:我们是如何从 PHP 5 升级到 PHP 7 的
    PHP / Laravel 月刊 #23
    十个你需要在 PHP 7 中避免的坑
  • 原文地址:https://www.cnblogs.com/z18271397173/p/8511273.html
Copyright © 2011-2022 走看看