咱們能從Python官方文檔裏讀到應該用subprocess
模塊來運行系統命令.subprocess
模塊容許咱們建立子進程,鏈接他們的輸入/輸出/錯誤管道,還有得到返回值。python
subprocess
模塊中基本的進程建立和管理由Popen
類來處理.subprocess.popen
是用來替代os.popen
的.
咱們來作一些真實的例子,subprocess.Popen
須要一個數組做爲參數:shell
注意,雖然你可使用 "shell=True",但並不推薦這樣的方式.
若是你知道你只用幾個有限的函數,好比Popen
和PIPE
,你能夠單單指定這幾個函數:數組
communicate()
函數返回一個tuple
(標準輸出和錯誤).Popen.communicate()
和進程溝通:發送數據到標準輸入.從標準輸出和錯誤讀取數據直到遇到結束符.等待進程結束.
輸入參數應該是一個字符串,以傳遞給子進程,若是沒有數據的話應該是None
.
基本上,當你用 communicate()
函數的時候意味着你要執行命令了.函數
subprocess.check_output:編碼
Python3中的subprocess.check_output函數能夠執行一條sh命令,並返回命令的輸出內容,用法以下:spa
output = subprocess.check_output(["python3", "xx.py"], shell = False)
該函數兩個參數第一個表示命令內容,由於中間有空格因此用中括號這種形式,同時制定shell=False表示命令分開寫了。而該命令執行後的輸出內容會返回給output變量。code
須要注意的是這個output變量並非一個string,也就是說不能用string的一些函數,返回的實際上是一個編碼後的比特值,實際的編碼格式取決於調用的命令,所以python3將解碼過程交給應用層,也就是咱們使用的人來作。這樣就清晰了,要對輸出使用stirng的操做,須要先經過解碼將其轉換成string:coffeescript
output = subprocess.check_output(["python3", "xx.py"], shell = False) out = output.decode() if (out.find("yes") >= 0): print("yes") else: print("no")