天天看點

python subprocess使用介紹例子總結

shell中可以很友善的調用其它應用程式,将不同的應用程式組合組合起來。

python通過subprocess子產品也能實作類似功能。

因為python擁有豐富的資料接口,簡潔的文法,讓python在進行類似的工作時比shell更容易維護。

subprocess主要有以下幾個函數:

這些函數底層都是使用popen 類,該類擁有的方法和屬性有有:

目前例子環境為:python3.4+windows10。

主要為了實作:python調用mysql,向mysql傳遞指令,擷取mysql執行之後的結果。

通過變量傳遞和儲存輸入輸出,使用popen

方法1還有一種寫法,直接向stdin寫入指令,直接從stdout讀出結果:

通過變量傳遞輸入,将輸出儲存到檔案中,使用popen

通過檔案傳遞輸入,将輸出儲存到檔案中,使用popen

對于方法3,還有另外一種寫法,使用call:

中的stdin,stdout,stderr需要是pipe, devnull, none或者是file descriptor 。

如果傳入的參數是pipe,那麼popen會自己建立一個pipe,可以把這個pipe當做一個檔案,stdin可以往裡面寫(寫完指令之後,注意close),stdout可以從裡面讀。參考test11()

如果stdin是file descriptor ,需要檔案中有準備好的内容,因為程序在執行的時候,會直接從這個檔案中讀取資料。參考test3()或test31()

 中的input需要是none,或者bytes(如果universal_newlines =true,可以是string),這個函數隻能調用一次,調用之後會一直等待,直到程序停止。

如果是一些簡單的調用,執行使用call、check_call、check_output就行了。

如果需要更精細的控制,使用popen可以完成。如果是程序間的通信,使用pipe,如果僅僅傳入一些指令,使用檔案或者communicate中的input既可。

以上是一個例子,真正和mysql互動的時候可以使用其提供的用戶端mysql-connector直接進行互動 。