使用Python呼叫系統命令

2021-10-01 08:36:53 字數 2313 閱讀 3582

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可以建立程序,並與程序進行複雜的互動。其函式原型為:

class 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)

args:這個引數必須是字串或者是乙個由字串成員的列表。其中如果是乙個字串列表的話,那第乙個成員為要執行的程式的路徑以及程式名稱;從第二個成員開始到最後乙個成員為執行這個程式需要輸入的引數。

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() 殺死該子程序。

總結

subprocess是用來替代os.system等函式的,當subprocess.call()、subprocess.check_call()、subprocess.check_output()和subprocess.run()這些高階函式無法滿足需求時,我們可以使用subprocess.popen類來實現我們需要的複雜功能。

python 呼叫系統命令

使用 os.system 呼叫系統命令 程式中無法獲得到輸出和返回值 import os os.system ls l proc cpuinfo os.system ls l proc cpuinfo r r r 1 root root 0 3月 29 16 53 proc cpuinfo 0使用 ...

python呼叫系統命令

1.os.system 例如 os.system ls 如果在命令列下執行,結果直接列印出來 裡面的引數即為dos命令。這樣的話是不能將得到的東西顯示出來的。但是如果是執行一些其他的操作dos操作的話應該可以實現的。2.為了能夠得到返回的結果集可以這樣來處理的 os.popen popen comm...

python 呼叫系統命令

僅僅在乙個子終端執行系統命令,而不能獲取命令執行後的返回資訊 如果再命令列下執行,結果直接列印出來 例如 import os os.system ls 輸出結果 chk err log.py cmdtool.log install log.txt install zabbix.sh manage d...