在Python裡面,直接呼叫系統命令,可以快速的完成任務。一般使用os或者subprocess模組,來執行系統命令。
os.system()
該函式返回命令執行結果的返回值,system()函式在執行過程中進行了以下三步操作:
1、fork一個子程序;
2、在子程序中呼叫exec函式去執行命令;
3、在父程序中呼叫wait(阻塞)去等待子程序結束。
返回0表示命令執行成功,其他表示失敗。
注意:使用該函式經常會莫名其妙地出現錯誤,但是直接執行命令並沒有問題,所以一般建議不要使用。
用法:os.system(“command”)
os.popen()這種呼叫方式是透過管道的方式來實現,函式返回是 file read 的物件,對其進行讀取read、readlines等操作可以看到執行的輸出。
注意:如果命令執行失敗,就讀取不到內容。
用法:os.popen(“command”)
subprocess.Popen()subprocess模組被推薦用來替換一些老的模組和函式,如:os.system、os.spawn*、os.popen*等
subprocess模組目的是fork一個新的程序並與之通訊,最常用是定義類Popen,使用Popen可以建立程序,並與程序進行復雜的互動。其函式原型為:
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)1args:這個引數必須是字串或者是一個由字串成員的列表。其中如果是一個字串列表的話,那第一個成員為要執行的程式的路徑以及程式名稱;從第二個成員開始到最後一個成員為執行這個程式需要輸入的引數。
executable:指定要執行的程式,這個一般很少用到,因為要指定執行的程式在args中已經指定了。stdin,stdout ,stderr:分別代表程式的標準輸入、標準輸出、標準錯誤處理。可以選擇的值有PIPE,已經存在的開啟的檔案物件和NONE。若stdout是檔案物件的話,要確保檔案物件是處於開啟狀態。
shell:預設是False。shell引數根據要執行的命令情況來定,如果將引數shell設為True,executable將指定程式使用的shell。在windows平臺下,預設的shell由COMSPEC環境變數來指定。
bufsize:指定緩衝。0 無緩衝,1 行緩衝,其他 緩衝區大小,負值 系統緩衝
cwd:用於設定子程序的當前目錄
stdin, stdout, stderr:分別表示程式的標準輸入、標準輸出、標準錯誤輸出,可以是 subprocess.PIPE 或 其他程式、檔案。
env:用於指定子程序的環境變數。如果env = None,子程序的環境變數將從父程序中繼承。
universal_newlines:不同系統的換行符不同,True 即使用 \n
preexec_fn:只在Unix平臺下有效,用於指定一個可執行物件(callable object),它將在子程序執行之前被呼叫。
用法: child = subprocess.Popen([“cmd”,“arg1”…])
subprocess.Popen類的例項可呼叫的方法Popen.poll() 用於檢查子程序(命令)是否已經執行結束,沒結束返回None,結束後返回狀態碼。
Popen.wait(timeout=None)等待子程序結束,並返回狀態碼;如果在timeout指定的秒數之後程序還沒有結束,將會丟擲一個TimeoutExpired異常。
Popen.communicate(input=None, timeout=None)該方法可用來與程序進行互動,比如傳送資料到stdin,從stdout和stderr讀取資料,直到到達檔案末尾。
Popen.send_signal(signal)傳送指定的訊號給這個子程序。
Popen.terminate()停止該子程序。
Popen.kill()殺死該子程序。
在Python裡面,直接呼叫系統命令,可以快速的完成任務。一般使用os或者subprocess模組,來執行系統命令。
os.system()
該函式返回命令執行結果的返回值,system()函式在執行過程中進行了以下三步操作:
1、fork一個子程序;
2、在子程序中呼叫exec函式去執行命令;
3、在父程序中呼叫wait(阻塞)去等待子程序結束。
返回0表示命令執行成功,其他表示失敗。
注意:使用該函式經常會莫名其妙地出現錯誤,但是直接執行命令並沒有問題,所以一般建議不要使用。
用法:os.system(“command”)
os.popen()這種呼叫方式是透過管道的方式來實現,函式返回是 file read 的物件,對其進行讀取read、readlines等操作可以看到執行的輸出。
注意:如果命令執行失敗,就讀取不到內容。
用法:os.popen(“command”)
subprocess.Popen()subprocess模組被推薦用來替換一些老的模組和函式,如:os.system、os.spawn*、os.popen*等
subprocess模組目的是fork一個新的程序並與之通訊,最常用是定義類Popen,使用Popen可以建立程序,並與程序進行復雜的互動。其函式原型為:
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)1args:這個引數必須是字串或者是一個由字串成員的列表。其中如果是一個字串列表的話,那第一個成員為要執行的程式的路徑以及程式名稱;從第二個成員開始到最後一個成員為執行這個程式需要輸入的引數。
executable:指定要執行的程式,這個一般很少用到,因為要指定執行的程式在args中已經指定了。stdin,stdout ,stderr:分別代表程式的標準輸入、標準輸出、標準錯誤處理。可以選擇的值有PIPE,已經存在的開啟的檔案物件和NONE。若stdout是檔案物件的話,要確保檔案物件是處於開啟狀態。
shell:預設是False。shell引數根據要執行的命令情況來定,如果將引數shell設為True,executable將指定程式使用的shell。在windows平臺下,預設的shell由COMSPEC環境變數來指定。
bufsize:指定緩衝。0 無緩衝,1 行緩衝,其他 緩衝區大小,負值 系統緩衝
cwd:用於設定子程序的當前目錄
stdin, stdout, stderr:分別表示程式的標準輸入、標準輸出、標準錯誤輸出,可以是 subprocess.PIPE 或 其他程式、檔案。
env:用於指定子程序的環境變數。如果env = None,子程序的環境變數將從父程序中繼承。
universal_newlines:不同系統的換行符不同,True 即使用 \n
preexec_fn:只在Unix平臺下有效,用於指定一個可執行物件(callable object),它將在子程序執行之前被呼叫。
用法: child = subprocess.Popen([“cmd”,“arg1”…])
subprocess.Popen類的例項可呼叫的方法Popen.poll() 用於檢查子程序(命令)是否已經執行結束,沒結束返回None,結束後返回狀態碼。
Popen.wait(timeout=None)等待子程序結束,並返回狀態碼;如果在timeout指定的秒數之後程序還沒有結束,將會丟擲一個TimeoutExpired異常。
Popen.communicate(input=None, timeout=None)該方法可用來與程序進行互動,比如傳送資料到stdin,從stdout和stderr讀取資料,直到到達檔案末尾。
Popen.send_signal(signal)傳送指定的訊號給這個子程序。
Popen.terminate()停止該子程序。
Popen.kill()殺死該子程序。