使用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官網地址

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM