os.system
方式:import os os.system('top') os.system('cat /proc/cpuinfo')
說明python
這個調用至關直接,且是同步進行的,程序須要阻塞並等待返回。
返回值是依賴於系統的,直接返回系統的調用返回值,因此windows和linux是不同的。
強調的一點是,不支持參數,不支持管道
os.open
方式:import os output = os.popen('df') print output.read() #若是命令自身無報錯,則返回正確的值
說明linux
popen方法經過p.read()獲取終端輸出,並且popen須要關閉close().
當執行成功時,close()不返回任何值,失敗時,close()返回系統返回值..
可見它獲取返回值的方式和os.system不一樣
強調的一點是,不支持參數,不支持管道
使用commands模塊的getoutput方法,這種方法同popend的區別在於popen返回的是一個文件句柄,而本方法將外部程序的輸出結果看成字符串返回,不少狀況下用起來要更方便些。
主要方法:shell
a = commands.getoutput('ps -ef ') b = commands.getstatusoutput('vmstat')
說明windows
使用subprocess模塊可以建立新的進程。
可以與新建進程的輸入/輸出/錯誤管道連通。
並可以得到新建進程運行的返回狀態。
使用subprocess模塊的目的是替代os.system()、os.popen ()、commands.等舊的函數或模塊。
from subprocess import call call(['ls','-l','/boot','/sys']) # call('ls -a /',shell=True)
subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)