2017-05-23 19 views
0
#!/usr/bin/python 
import subprocess 
import signal 
import time 
p=subprocess("adb devices") 
p_id=p.pid 
time.sleep 
os.kill(p_pid,signal.SIGINT) 
print "bye" 

這是工作正常並打印「再見」,但下面的代碼沒有終止,持續打印日誌內容,並不會打印「再見」。子過程中取消活動日誌時失敗

#!/usr/bin/python 
import subprocess 
import signal 
import time 
p=subprocess("adb logcat -v time event") 
p_id=p.pid 
time.sleep 
os.kill(p_pid,signal.SIGINT) 
print "bye" 

提前 布沙拉

+1

你使用'os.kill()'和'p.kill()'的任何特殊原因? (後者將在Windows上正確切換到使用'terminate()'......在哪一點上,你能指定你的操作系統嗎?) –

+0

順便說一句,'time.sleep'根本不會做任何事情。也許你的意思是'time.sleep(1)'或類似的東西? –

+0

順便說一句,哪個版本的Python是這樣的?如果目標爲3.3或更高版本,我強烈建議使用'timeout ='參數來指定'Popen()';這樣你可以得到'sleep()'的效果,但是如果命令在超時之前退出,它會自動返回。 –

回答

0
#!/usr/bin/python 
import subprocess 
import time 
p=subprocess.Popen(['adb', 'logcat', '-v', 'time', 'event']) 
time.sleep(1) # wait for a second 
p.kill() 
print "bye" 

值得注意項目好心建議

感謝:

  • 如果您使用的外殼,你的信號傳遞到外殼,不是它開始的過程。爲確保信號直接傳遞到過程,請直接運行過程。
  • time.sleep自己完全沒有辦法;它需要被調用爲一個函數,如time.sleep(1),有任何效果。
  • 使用p.kill()可讓subprocess模塊爲當前平臺選擇合適的終止機制,而不是os.kill()