1. 程式人生 > >python中subprocess.Popen執行命令並持續獲取返回值

python中subprocess.Popen執行命令並持續獲取返回值

轉自 :http://blog.sina.com.cn/s/blog_44d19b500102x21i.html

先舉一個Android查詢連線裝置的命令來看看Python中subprocess.Popen怎麼樣的寫法。用到的命令為 adb devices。

  import subprocess

  order='adb devices' #獲取連線裝置

  pi= subprocess.Popen(order,shell=True,stdout=subprocess.PIPE)

  print pi.stdout.read()#列印結果

命令的結果返回是一次性的,所以我們用read方法讀取資料是沒有問題的,然而adb命令裡還有一些是實時返回結果的,比如輸出手機日誌的命令logcat,結果會不斷的打印出來當前的裝置操作日誌資訊內容,這種型別的命令我們在Python中如果需要獲取列印結果,如果還是用read方法的話,等待結果的返回時間會非常長,這裡我們就要換一種方法讀取結果,寫法如下。

  import subprocess

  order='adb logcat'

  pi= subprocess.Popen(order,shell=True,stdout=subprocess.PIPE)

  for i in iter(pi.stdout.readline,'b'):

      print i

這樣的列印效果,如同cmd裡操作一致,實時的打印出日誌資訊。這裡我們就用到了readline方法和iter()函式,其實這種寫法類似我們讀取檔案,單行讀取和全部內容讀取。