2011-05-30 68 views
7

Estoy tratando de escribir una aplicación que utiliza puertos serie en una PC con Linux, utilizando Python y PySerial. Pero en esta PC hay otras aplicaciones que usan puertos serie. ¿Cómo puedo saber si un puerto ya está abierto por otra aplicación antes de intentar usarlo?Python PySerial.¿Cómo saber si un puerto ya está abierto?

gracias

Respuesta

14

parece estar mal documentado en el sitio web PySerial, esto funciona para mí:

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

Un poco de un ejemplo artificial, pero se entiende la idea. Sé que esta pregunta fue hecha hace mucho tiempo, pero hoy tuve la misma pregunta y sentí que cualquier persona que encuentre esta página apreciaría encontrar una respuesta.

+0

Me acabo de dar cuenta de que la pregunta era hacer algo ligeramente diferente a esto, pero espero que esta respuesta siga siendo útil. – StampyCode

+1

Acabo de encontrar esta, la mejor de la lista en Google, en agosto de 2017. Gracias por publicar esto de la manera en que lo hizo. Respondió mi pregunta exactamente. En mi caso, significa que el programa ya se está ejecutando. Uso ssh en las computadoras y algunas veces tengo el programa de registro de datos 'ssx'running desde la consola. Python ahora puede usar esto para detectarlo sin simplemente abortar, y usar 'os.system (" killall ssx ")' para detener al otro por sí mismo. Esto solo ocurre cuando estoy haciendo cambios, pero fue suficiente para mí buscar. Y aquí estás. TNX. – SDsolar

0

Esto es lo que me ayudó a tratar de evitar que mi aplicación fallara porque se detuvo y se inició de nuevo.

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