2014-03-13 63 views
1

我在Python中遇到了一個小問題,我想用python啓動「gsmsmsd」守護進程(讀取傳入的SMS)並從此守護進程讀取輸出。 如果我用我的控制檯啓動這個守護進程,那麼在SMS進入之前就會有一個沒有任何輸出的輸出,然後這個SMS顯示在控制檯中。 但一定要讀這傳入的短信成Python的解決方案....Python:如何從gsmsmsd守護進程獲得輸出?

首先,我有試過這樣:

while True: 
    a = os.popen("gsmsmsd -d /dev/ttyACM1 -b 9600 -t SM") 
    print a 
    time.sleep(1) 

但我認爲os.popen功能只讀取輸出後直接命令,是這樣嗎?如果是,短信5分鐘後就沒有了紅色了。 我該如何解決這個問題?是否有其他的函數可以在更長的時間內從控制檯讀取輸出,而無需多次啓動守護進程?

我很樂意聽到別人的聲音。

電賀 雅各布

回答

0

我想你需要的是使用select模塊和輪詢其中somethoing在設備上編寫的事件。例如: (免責聲明:未經測試,可能無法正常工作,因此您應該閱讀該鏈接):

import select 
import os 

epoll = select.epoll() 
dev = os.open("/dev/ttyACM1",os.O_RDONLY) 
epoll.register(dev, select.EPOLLIN) 
event = dev, selecet.EPOLLIN 

while True: 
    events = epoll.poll(1) 
    if event in events: 
     print dev.read()