python執行系統命令的方法

2021-09-21 04:52:24 字數 2394 閱讀 6765

做為系統工程師來說,經常會用到python指令碼去呼叫一下系統命令,現把經常使用的集中呼叫方法總結如下:

一,os.system(command)

在乙個子shell中執行command命令,並返回command命令執行完畢後的退出狀態。這個函式執行命令的結果無法儲存,只能顯示在標準輸出。但是,命令執行是否成功的退出狀態可以通過變數得到,非0即為不正常。

例:>>> os.system('ls /tmp')

hsperfdata_root  supervisor.sock  tmp_fifo

0>>> code=os.system('ls /tmp')

hsperfdata_root  supervisor.sock  tmp_fifo

>>> print code

0二,os.popen(command[, mode[, bufsize]])

開啟乙個與command程序之間的管道,函式的返回值是乙個連線到管道的檔案物件,故可以對檔案做讀寫操作(由mode決定rw,mode預設是』r',)。bufsize指定了檔案期望的buffer大小,0意味著不是用buffer,1意味著line buffered(行緩衝),負值意味著使用系統預設行為,正值意味著按設定的num值開闢buffer空間;一般終端相關的裝置輸出用行緩衝,對檔案相關輸出用全緩衝;預設情況下,buffer是全緩衝,加快了檔案讀取速度減少了上下文切換。如果mode為』r',可以使用此函式的返回值呼叫read()來獲取command命令的執行結果。

例:>>> f=os.popen('ls /tmp')            

>>> f.readlines()

['hsperfdata_root\n', 'supervisor.sock\n', 'tmp_fifo\n']

三,subprocess

第一種:

subprocess.call(["some_command","some_argument","another_argument_or_path"])

與os.system的功能相同。

第二種:

subprocess.popen(command,shell=true)

已子程序的方式去執行命令,然後返回代表新程序的popen物件。他可以與新建程序的輸入/輸出/錯誤管道聯通,並可以獲得新建程序執行的返回狀態等。使用subprocess模組主要目的就是來替代之前的os,popen,commands等函式或模組。

例:執行基本的系統命令,直接輸出結果

>>> ret = subprocess.call('ls /tmp',shell=true)

hsperfdata_root  supervisor.sock  tmp_fifo

執行系統命令,但是捕捉輸出

>>> f = subprocess.popen('ls /tmp',shell=true,stdout=subprocess.pipe)

>>> print f.stdout.readlines()

['hsperfdata_root\n', 'supervisor.sock\n', 'tmp_fifo\n']

建立2個子程序,通過管道把他們連線起來。乙個程序的輸出作為另乙個程序的輸入

>>> f = subprocess.popen('ls -l',shell=true,stdout=subprocess.pipe)

>>> p = subprocess.popen('wc', shell=true, stdin=f.stdout, stdout=subprocess.pipe) 

>>> print p.stdout.readlines()

['     73     652    4161\n']

四,commands

commands模組用於執行以字串形式指定的簡單系統命令,並將其輸出以字串形式返回,僅使用於unix系統。

第一種:

getoutput(cmd)

在shell中執行cmd,返回包含命令標準輸出和標準錯誤流的字串。

getstatusoutput(cmd)

與getoutput類似,差別在於返回的是二元組(status,output)

例:>>> out=commands.getoutput('ls /tmp') 

>>> print out

hsperfdata_root

supervisor.sock

tmp_fifo

>>> status,out=commands.getstatusoutput('ls /tmp') 

>>> print status,out

0 hsperfdata_root

supervisor.sock

tmp_fifo

Python執行系統命令的方法

最近在做那個測試框架的時候發現 python 的另乙個獲得系統執行命令的返回值和輸出的類。最開始的時候用 python 學會了 os.system 這個方法是很多比如 c,perl 相似的。os.system cat proc cpuinfo 但是這樣是無法獲得到輸出和返回值的,繼續 google,...

Python執行系統命令的方法

python中執行系統命令常見方法有兩種 兩者均需 import os 1 os.system 僅僅在乙個子終端執行系統命令,而不能獲取命令執行後的返回資訊 system command exit status execute the command a string in a subshell.如...

python執行系統命令的方法有哪些?

python是一款操作簡單的程式語言,內建豐富的庫,能夠很容易的實現強大的功能,在使用python進行框架搭建時,往往需要用到python執行系統命令,一些開發人員對此不熟悉,以下是具體的操作方法 1.os.system 這個方法直接呼叫標準c的system 函式,僅僅在乙個子終端執行系統命令,而不...