2013-05-30 26 views
0

我有一個項目需要用Python編寫的無限循環。此腳本將循環訪問一組變量(在腳本開始時創建一次),使用每個變量執行一項任務,然後重新開始。這工作正常99.9%的時間,但每隔一段時間電子卡住,它崩潰。這不是一個問題,而是由硬件限制而不是我的腳本引起的。錯誤我的Python紙條輸出如下,如果我的I2C總線上的另一側Arduino是忙別的什麼事情而無法響應的原因造成的:錯誤處理程序:Python無限循環的Bash啓動腳本

Traceback (most recent call last): 
    File "i2cGet.py", line 105, in <module> 
    i2c.i2cWrite(0x54, 1, fanCurrent) 
    File "/home/pi/arduino_Interface/i2c.py", line 43, in i2cWrite 
    bus.write_byte(address,data) 
IOError: [Errno 5] Input/output error 

爲了照顧這,我有一個bash「starter」,它會在使用until python script.py do崩潰時重新啓動python腳本。這也工作得很好,但我正在處理這個過程的事件記錄,並且需要知道我的python腳本崩潰的數組中的哪個變量,所以我可以將它插入到日誌中。據推測,這可以通過Python中的自定義事件處理程序來完成,但我很難弄清楚完成此任務需要做些什麼。

總結的問題:如何在Python中創建一個自定義事件處理程序,然後檢索在我的bash啓動腳本中使用的事件?

請原諒我的事件/事件處理程序的術語。我只是在尋找一種方式,在發生錯誤時,傳遞我正在處理的數組中的最後一個元素。在這種情況下,i2cWrite函數中的0x54,但如果腳本在循環中的其他位置崩潰,則可能不會總是在那裏列出。也許更正確的術語是錯誤處理程序,而不是事件處理程序...

在這一點上,我在Bash中這樣做的唯一原因是我有一個啓動腳本,用於在以前的項目中持久存在,很容易適應這個項目。如果用Python啓動器更容易處理這個問題,我可以很容易地(我認爲)將其移植過來。

感謝您的幫助!

+0

當你說崩潰時,是否有異常? – fge

+0

「事件處理程序」和「事件」是什麼意思?我想不出任何在這裏有意義的術語的正常含義? – abarnert

+0

同時,Python從哪裏獲取數組?你有沒有使用任何持久性機制? – abarnert

回答

0
until event=$(python script.py) 
do 
    ... 
done 

的Python腳本應該打印到標準輸出的事件,然後你可以參考$event在循環體。

+0

當python腳本崩潰時,這不會傳遞我正在處理的數組中的元素。這個元素是我期待傳回來的。 – Butters

+0

我以爲你的問題是關於如何讓它進入bash。我假設你知道如何獲得python中的相關元素。 – Barmar

+0

我需要在python腳本崩潰時將我在python中使用的元素傳遞給bash啓動腳本。我有一個使用until循環的bash starter腳本,並且python腳本正在做什麼需要完成,我只需要知道Python在崩潰時使用的元素。 – Butters