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直接進行互動 。