COM3上のデバイスに文字を送信するように設定された単純なPythonスクリプトがあります。 (これはWindows XPで動作しています) デバイスは文字を正常に受信しますが、スクリプトが終了するか、または私が電話をします
ser.close() #ser is an instance of the `serial` method `Serial`
シリアルポートのDTRラインをHighに設定し、デバイスをリセットします。
これに当惑して、私はPySerialドキュメンテーションで突っ込みました(http://pyserial.sourceforge.net/そして、モジュールが __del__
メソッドを呼び出します。 ser.close()
シリアルインスタンスが削除されたときに機能します。
これをオーバーライドする方法はありますか __del__
方法?
(デバイスのリセットラインをDTRラインから切断する必要はありません)
以下は私が使っている基本的なコードです。
import serial
ser = serial.Serial()
ser.port = 2 #actually COM3
ser.baudrate = 9600
ser.open()
ser.write("Hello")
ser.close()
回答:
回答№1の場合は3もちろん、先に進んで上書きしてください。どちらかのサブクラスを作成することができます Serial
何もしない __del__()
メソッドの代わりにサブクラスを使用します。 Serial
または実際のメソッドからそのメソッドを削除します。 Serial
クラス(モンキーパッチ)を使って del
ステートメント。前者の方法が優先されますが、制御できないコードがシリアルポートを使用している場合は、2番目の方法が必要になることがあります。 __del__()
methodは、オーバーライドする前に、他に重要なことは何もしません。
サブクラス化
import serial
class mySerial(serial.Serial):
def __del__(self):
pass
ser = mySerial()
# rest of script the same
猿パッチ:
import serial
del serial.Serial.__del__
このモジュール用のPythonソースがある場合 それはC)で書かれていません、3番目のアプローチはそれのあなた自身のコピーを作成しそれをしないようにそれを編集することです。 (Cモジュールでもこれを行うことができますが、Cの専門知識がない場合は、実行するのが少し難しいです。)
もちろん、 __del__()
呼び出さないメソッド ser.close()
「あなたが呼ぶので、あなたが与えるコードの中で多くの手助けをするつもりはない」 ser.close()
あなた自身。 :-)
回答№2については2
このようなことを試しましたか?
MySerial = serial.Serial
def dummy_del(obj):
pass
MySerial.__del__ = dummy_del
ser = MySerial()