zoukankan      html  css  js  c++  java
  • 模块-subprocess

    os模块执行系统命令

    os.system('system cmd'),返回系统执行结果,0为成功,非0失败

    os.popen('system cmd'),返回系统命令执行返回结果

    subprocess也是执行命令,在python3中,subprocess替换os.system,os.spawn,os.popen功能。

    subprocess.run()推荐

     例:

    import subprocess
    
    #执行单命令
    cmd_result=subprocess.run(['ipconfig','/all'],stderr=subprocess.PIPE,stdout=subprocess.PIPE,check=True)
    #check=True:报错则报CalledProcessError错误
    #check=False,默认,程序不会报错,命令执行的错误返回在sederr中
    #命令执行结果
    print(cmd_result.stdout)
    
    #系统命令添加其他参数
    cmd_result=subprocess.run('df -h | grep disk1',stderr=subprocess.PIPE,stdout=subprocess.PIPE,shell=True)
    #1、命令以字符串方式传入,不用列表
    #2、shell=True,告诉subprocess将命令直接执行,不进行拼接
    

      subprocess.call()

    例:

    import subprocess
    
    #命令执行完后直接反回命令执行结果和执行状态
    subprocess.call('ipconfig /all')
    
    #正常执行返回,否则抛出异常
    subprocess.check_call(['ls','-l'])
    
    #接收字符串格式命令,反回元组,第一个状态,第二个结果
    subprocess.getstatusoutput('ls /bin/ls')
    
    #接收字符串格式命令,并反回结果
    subprocess.getoutput('ls /bin/ls')
    
    #执行命令,返回结果,非打印
    subprocess.check_output('ls -l')
    

      subprocess.Popen(),run和call的底层封装

    run和Popen区别,Popen另起一个进程处理当前命令,run在当前进程中执行

    例:

    import subprocess
    #args:shell命令,可以是字符串,list,元组
    #stdin,stdout,stderr:分别代表标准输入、输出、错误句柄
    #preexec_fn:Unix平台有效,用于指定一个可执行对象,将在子进程执行之前被调用
    #shell:True或者Flase,字符串方式传入命令,True表示不对命令进行解析
    #cwd:设置子进程当前目录
    #env:指定子进程环境变量,不指定则从父进程继承
    result=subprocess.Popen('cmd',shell=True,stdout=subprocess.PIPE)
    result.poll()#获取进程执行结果状态,0表示命令无错误
    result.wait()#等待子进程结束
    result.pid#进程号
    result.terminate()#发送停止信号,不强制停掉
    result.kill()#强制结束进程
    result.stdout.read()#命令执行结果
    
    #交互
    #该方法定义在一个py文件中,命名为interaction.py
    def interaction():
        while True:
            input=input('Enter msg:')
            if input=='q':
                break
            else:
                print(input)
    interaction()
    #subprocess.Popen()交互
    result=subprocess.Popen('python interaction.py',stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE,shell=True)
    result.communicate(b'send')#给进进程发送数据,只能交互一次,如果程序需要交互多次,则会报错
    
    #发送信号
    import signal
    result.send_signal(signal=signal.SIGTERM)#结束进程
    

      

  • 相关阅读:
    推荐一个SAM文件中flag含义解释工具--转载
    字节码技术
    Jconsole工具检测堆内存变化的使用
    观察者模式
    装饰器模式(IO流案例)
    JVM垃圾收集器
    内存溢出与内存泄漏区别
    栈溢出
    内存溢出
    JVM参数调优
  • 原文地址:https://www.cnblogs.com/yaya625202/p/8679247.html
Copyright © 2011-2022 走看看