web-dev-qa-db-ja.com

Python PySerial。ポートがすでに開いているかどうかを知る方法は?

Linux PCでpythonとPySerialを使用して、シリアルポートを使用するアプリを作成しようとしています。しかし、このPCには、シリアルポートを使用する他のアプリがあります。ポートかどうかを確認するにはどうすればよいですか?それを使用しようとする前に、他のアプリによってすでに開かれていますか?

ありがとう

9
nicolango

PySerialのWebサイトで十分に文書化されていないようですが、これは私にとってはうまくいきます。

ser = serial.Serial(DEVICE,BAUD,timeout=1)
if(ser.isOpen() == False):
    ser.open()

少し不自然な例ですが、あなたはその考えを理解します。この質問はずっと前に行われたことは知っていますが、今日も同じ質問があり、このページを見つけた他の人が答えを見つけていただければ幸いです。

21
StampyCode

これは、アプリケーションが停止して再開したためにアプリケーションが失敗するのを防ぐために私が助けたものです。

import serial

try:
  ser = serial.Serial( # set parameters, in fact use your own :-)
    port="COM4",
    baudrate=9600,
    bytesize=serial.SEVENBITS,
    parity=serial.PARITY_EVEN,
    stopbits=serial.STOPBITS_ONE
  )
  ser.isOpen() # try to open port, if possible print message and proceed with 'while True:'
  print ("port is opened!")

except IOError: # if port is already opened, close it and open it again and print message
  ser.close()
  ser.open()
  print ("port was already open, was closed and opened again!")

while True: # do something...
1
Tobias

Serial.serialの戻り出力を確認してください。キャッチできる無効な例外が返されます。

http://pyserial.sourceforge.net/pyserial_api.htmlhttp://pyserial.sourceforge.net/pyserial_api.html#serial.SerialException

それ以外に、プログラムがポートにアクセスしようとしたときにポートが実際に閉じられている場合、スローされるエラーは致命的ではなく、失敗した理由についてはかなり明確です。

1
Fuller