• 使用python执行linux命令


    python版本是2.7.12

    一、简单的获取linux命令的执行结果,比如:获取一个PID的进程树结构,linux命令是pstree -p pid,在python中有一个模块可以方便的获取。至于有时候获取的结果是乱码的情况,请参考之前的随笔:ubuntu常用的一些命令

      命令是 commands.getoutput(cmd),

    cmd = "pstree -p %s"%pid
    result = commands.getoutput(cmd)

     

    二、开启一个新的进程来执行脚本文件,就需要使用python中另一个模块了,subprocess,官网地址

      接下来进行简单的函数说明

      1 subprocess.call(args*stdin=Nonestdout=Nonestderr=Noneshell=False)调用进程会等待子进程执行args结束,然后将returncode返回。

      2 subprocess.check_output(args*stdin=Nonestderr=Noneshell=Falseuniversal_newlines=False) 调用进程会等待子进程执行args结束,然后将他的输出以byte string形式返回。注意:如果return code是非零值,将产生一个CalledProcessError异常,

      

      如果想以子进程的形式调用命令,则需要使用Popen类。  

      subprocess.Popen(argsbufsize=0executable=Nonestdin=Nonestdout=Nonestderr=Nonepreexec_fn=Noneclose_fds=False,shell=Falsecwd=Noneenv=Noneuniversal_newlines=Falsestartupinfo=Nonecreationflags=0)

      默认情况下,他会开一个子进程,并且是非阻塞。args可以是参数列表[]或者是一个字符串""。shell参数表示是否打开shell执行程序,如果shell参数是True,官方推荐args写成字符串形式。

      举个简单例子:

        p1=subprocess.Popen("ls",shell=True)

    >>> p=subprocess.Popen("ls")
    >>> myfile.txt

      

        test.py文件

    import time
    
    def fun1():
            for i in range(1000):
                    time.sleep(1)
    
    if __name__ == "__main__":
            fun1()

    >>> import subprocess
    >>> p2=subprocess.Popen("python test.py",shell=True)

    查看进程情况

    >>>ps -ef|grep test.py
    penchenz 28020 28015 0 15:24 pts/4 00:00:00 python test.py
    penchenz 28082 28043 0 15:24 pts/12 00:00:00 grep test.py

    执行结果

    >>>top -p 28020

    top - 15:25:01 up 23 days, 17:49, 20 users,  load average: 0.10, 0.09, 0.06
    Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
    Cpu(s):  1.2%us,  0.6%sy,  0.0%ni, 98.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:  32883356k total, 32028992k used,   854364k free,   940836k buffers
    Swap: 16515068k total,   214156k used, 16300912k free, 10079088k cached
    
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                
    28020 penchenz  20   0  113m 4488 1836 S  0.0  0.0   0:00.05 python    

    其他更详细的用法请参考subprocess官网地址

      

  • 相关阅读:
    Fix “Could not flush the DNS Resolver Cache: Function failed during execution” When Flushing DNS
    Spring Boot 2.0 教程 | AOP 切面统一打印请求日志
    FTP服务器原理
    SAMBA 服务器原理
    时间服务器:NTP 服务器
    账号控管:NIS服务器
    NFS服务器原理
    DHCP服务器原理
    Linux防火墙
    linux网络完全与防护
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/5801854.html
Copyright © 2020-2023  润新知