回覆列表
  • 1 # 一根筋的陳小呆

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

  • 中秋節和大豐收的關聯?
  • 康熙傳位雍正的遺詔為何成了眾人詬病雍正皇位來路不正的“元兇”?