21 python調用外部系統命令
阿新 • • 發佈:2018-07-02
常見 als proc 一個 shell pytho readline 讀取 只需要
1 Python中執行系統命令常見的幾種方法 2 一,使用os模塊 3 import os 4 1,os.system 5 6 import os 7 os.system(‘cat /proc/cupinfo‘) ## 類似於perl中的system命令,不能獲取命令返回結果,只返回成功或失敗 8 註意: 9 本質是調用標準C的system() 函數,僅僅在一個子終端運行系統命令, 10 ##不能獲取命令執行後的返回信息。 11 12 2, os.popen ##相當於perl中的readpipe 和 `` 13 14 output = os.popen(‘cat /proc/cpuinfo‘) 15 print output.read() 16 #print output.readlines() 17 註意: 18 19 ##執行命令後返回的信息的對象, 20 ##必須使用read()方法來將結果讀取出來 21 ## 返回的結果是字符串 ,是str的類型 22 本質是通過一個管道文件將結果返回。23 所以進行讀寫時,裏面也是相當於會有文件指針的 24 25 二, 使用模塊commands模塊 26 import commands 27 28 (status, output) = commands.getstatusoutput(‘cat /proc/cpuinfo‘) 29 30 print status,output 31 print output ####一般是只打印出元組中第2個元素即可,第2個才是真正命令的結果,第1個只是返回運行狀態 32 33 34 35 36 註意1:在類unix的系統下使用此方法返回的返回值(status)與腳本或命令執行之後的返回值不等,這是因為調用了os.wait()的緣故,37 38 具體原因就得去了解下系統wait()的實現了。需要正確的返回值(status),只需要對返回值進行右移8位操作就可以了。 39 40 註意2:當執行命令的參數或者返回中包含了中文文字,那麽建議使用subprocess。 41 42 三,使用模塊subprocess 43 44 Subprocess是一個功能強大的子進程管理模塊,是替換os.system ,os.spawn* 等方法的一個模塊。 45 46 Class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, 47 48 stderr=None, preexec_fn=None, close_fds=True, shell=False, 49 50 cwd=None, env=None, universal_newlines=False, startupinfo=None, 51 52 creationflags=0, restore_signals=True, start_new_session=False, pass_fds=()) 53 54 有豐富的參數可以進行配置,可供我們自定義的選項多,靈活性高。 55 之前我使用os.system的時候遇到文件描述符被子進程繼承的問題,後來通過close_fds = False 這個參數來解決的。
21 python調用外部系統命令