#pyserial
#pyserial
Вопрос:
Я пытаюсь написать приложение, которое использует последовательные порты на ПК с Linux, используя python и PySerial. Но на этом КОМПЬЮТЕРЕ есть другие приложения, использующие последовательные порты. Как я могу узнать, открыт ли порт уже другим приложением, прежде чем пытаться его использовать?
Спасибо
Ответ №1:
Кажется, плохо документировано на веб-сайте PySerial, это работает для меня:
ser = serial.Serial(DEVICE,BAUD,timeout=1)
if(ser.isOpen() == False):
ser.open()
Немного надуманный пример, но идею вы уловили.
Я знаю, что этот вопрос задавался давным-давно, но у меня был тот же вопрос сегодня, и я подумал, что любой другой, кто найдет эту страницу, был бы признателен за ответ.
Комментарии:
1. Просто понял, что вопрос задавал что-то немного отличное от этого, но я надеюсь, что этот ответ все равно будет полезен!
2. Я только что нашел это — первое место в списке в Google, в августе 2017. Спасибо, что опубликовали это так, как вы это сделали. Это точно ответило на мой вопрос. В моем случае это означает, что программа уже запущена. Я использую ssh для подключения к компьютерам, и иногда у меня есть программа регистрации данных
ssx
, запущенная с консоли. Теперь Python может использовать это, чтобы обнаружить его без простого прерывания, и использоватьos.system("killall ssx")
для остановки другого порта самостоятельно. Это происходит только тогда, когда я вношу изменения, но мне этого было достаточно для поиска. И вот вы здесь. спасибо.
Ответ №2:
Это то, что мне помогло при попытке предотвратить сбой моего приложения, потому что оно было остановлено и запущено снова.
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...
Ответ №3:
Проверьте возвращаемый вывод Serial.serial, он возвращает недопустимое исключение, которое может быть перехвачено.
Документация по API
Документация по исключениям
Кроме этого, если порт фактически закрыт, когда ваша программа пытается получить к нему доступ, выданная ошибка не является фатальной и довольно ясно указывает на причину сбоя.
Комментарии:
1. Ссылки на sourceforge мертвы, Джим. Да здравствуют постоянные ссылки (или отвечайте на вопрос напрямую, а не через ссылку на другую страницу).