做為系統工程師來說,經常會用到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 函式,僅僅在乙個子終端執行系統命令,而不...