Это то, что мне помогло, когда я пытался предотвратить сбой моего приложения, потому что оно было остановлено и запущено снова.

аюсь написать приложение, которое использует последовательные порты на ПК с Linux, используя Python и PySerial. Но в этом ПК есть другие приложения, использующие последовательные порты. Как я могу узнать, открыт ли порт другим приложением, прежде чем пытаться его использовать?

Спасибо

Ответы на вопрос(3)

он возвращает недопустимое исключение, которое может быть перехвачено

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

Кроме этого, если порт фактически закрыт, когда ваша программа пытается получить к нему доступ, выдаваемая ошибка не является фатальной и достаточно ясно определяет причину ее сбоя.

плохо документировано на веб-сайте PySerial, это работает для меня:

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

Немного надуманного примера, но вы поняли идею. Я знаю, что этот вопрос задавался очень давно, но сегодня у меня был тот же вопрос, и я чувствовал, что любой, кто найдет эту страницу, будет благодарен за нахождение ответа.

 SDsolar24 авг. 2017 г., 03:19
Я только что нашел это - верхнюю часть списка в Google, в августе 2017 года. Спасибо за публикацию этого, как вы сделали. Он точно ответил на мой вопрос. В моем случае это означает, что программа уже запущена. Я использую SSH на компьютерах, и иногда у меня есть программа для записи данныхssxработает с консоли. Python теперь может использовать это, чтобы обнаружить его, не прерывая, и использоватьos.system("killall ssx") чтобы остановить другого самому. Это происходит только тогда, когда я делаю изменения, но этого было достаточно для поиска. И вот ты здесь. TNX.
 StampyCode27 мая 2013 г., 11:20
Просто понял, что вопрос задает что-то немного отличное от этого, но я надеюсь, что этот ответ все еще будет полезен!

что мне помогло, когда я пытался предотвратить сбой моего приложения, потому что оно было остановлено и запущено снова.

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...

Ваш ответ на вопрос