1. 程式人生 > >21 python調用外部系統命令

21 python調用外部系統命令

常見 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調用外部系統命令