0

Python で作成した無限ループを必要とするプロジェクトがあります。このスクリプトは、変数の配列 (スクリプトの開始時に一度作成されます) をループして、それぞれを使用してタスクを実行し、最初からやり直します。これは 99.9% の確率で問題なく動作しますが、時々電子がスタックしてクラッシュします。これは問題ではなく、スクリプトではなくハードウェアの制約が原因です。Python scrip が出力するエラーは次のとおりです。これは、I2C バスの反対側にある Arduino が他の処理で忙しく、応答できない場合に発生します。

    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 を使用してクラッシュしたときに python スクリプトを再起動する bash の「スターター」がありuntil python script.py doます。これも問題なく動作しますが、私はこのプロセスのイベント ログに取り組んでおり、Python スクリプトがクラッシュした配列内の変数をログに挿入できるようにする方法が必要です。おそらく、これは Python のカスタム イベント ハンドラーで行われるでしょうが、このタスクを達成するために何をする必要があるかを理解するのに苦労しています。

まとめた質問: Python でカスタム イベント ハンドラーを作成し、bash スターター スクリプトで使用するイベントを取得するにはどうすればよいですか?

イベント/イベント ハンドラーの用語についてはお許しください。エラーが発生した場合に、使用していた配列の最後の要素を渡す方法を探しているだけです。この場合、i2cWrite 関数に含まれる 0x54 ですが、スクリプトがループ内の別の場所でクラッシュした場合、常にそこにリストされるとは限りません。おそらく、より正確な用語は、イベント ハンドラーではなく、エラー ハンドラーです...

この時点で、これを Bash で行っている唯一の理由は、以前のプロジェクトで永続化のために使用したスターター スクリプトがうまく機能し、それをこのプロジェクトに適合させるのが簡単だったからです。Pythonスターターでこれを処理する方が簡単なら、これを簡単に移植できる(と思います)。

ご協力いただきありがとうございます!

4

1 に答える 1