subprocess

咱們能從Python官方文檔裏讀到應該用subprocess 模塊來運行系統命令.subprocess模塊容許咱們建立子進程,鏈接他們的輸入/輸出/錯誤管道,還有得到返回值。python

subprocess.Popen()

subprocess 模塊中基本的進程建立和管理由Popen 類來處理.
subprocess.popen是用來替代os.popen的.
咱們來作一些真實的例子,subprocess.Popen須要一個數組做爲參數:shell

import subprocess

p = subprocess.Popen(["echo", "hello world"], stdout=subprocess.PIPE)print p.communicate()

>>>('hello world
', None)
 

注意,雖然你可使用 "shell=True",但並不推薦這樣的方式.
若是你知道你只用幾個有限的函數,好比PopenPIPE,你能夠單單指定這幾個函數:數組

from subprocess import Popen, PIPEp1 = Popen(["dmesg"], stdout=PIPE)print p1.communicate()
 

Popen.communicate()

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")
相關文章
相關標籤/搜索