2017-06-22 194 views
0

我正在開發一個用於python的ADB客戶端,我打算用子進程調用adb二進制文件來獲取信息。啓動adb守護進程python

下面是我試圖調用它,啓動adb服務器。

check_output([ 'adb.exe','start-server'],stderr=STDOUT) 

我確實看到adb正在運行,但程序在此之後卡住了。 我試過shell=True,但是這並沒有影響到它。

當我從任務管理器中殺死adb時,程序確實退出並打印正確的輸出。

我該如何解決這個問題,我認爲這個命令並沒有退出,因爲守護進程正在運行?

我能夠通過在單獨的線程中啓動命令並將當前線程與其他adb命令一起使用來克服此問題,因爲它們會立即返回。 有沒有更優雅的解決方案?

回答

0

你可以用subprocess.Popen來做到這一點。

import subprocess 

adb = subprocess.Popen(['adb.exe', 'start-server']) 
# Do some other stuff while adb is running... 

adb.terminate() # Kill the process once you're done 

這還具有一些優點,如給予輸入以通過標準輸入的過程中,有可能通過使用Popen.communicate()