python执行系统命令的方法
? ? 做為系統工程師來說,經常會用到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
轉載于:https://blog.51cto.com/leejia/1439031
總結
以上是生活随笔為你收集整理的python执行系统命令的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bzoj1054
- 下一篇: GridView编辑删除操作