2010-06-24 14 views
6

Tengo que leer una secuencia que se envía desde un dispositivo casero a través del puerto serie. El problema es que debe implementarse en una máquina donde no tengo acceso para instalar nada nuevo, lo que significa que tengo que usar las bibliotecas estándar de python para hacerlo. ¿Es esto posible? De ser así, ¿cómo puedo gestionar esto?¿Cómo leer desde el puerto serie en python sin usar API externas?

Si resulta ser casi imposible, tendré que hacer que alguien instale pySerial, pero realmente agradecería que se pudiera hacer sin esto.

Si hay diferencias en Linux/Windows, esto es en una máquina con Windows, pero realmente agradecería una solución multiplataforma.

Respuesta

7

En sistemas operativos tipo Unix, el puerto serie funciona como un archivo, y simplemente lo abre y lee o escribe bytes. Hay algunas llamadas adicionales que puede hacer para establecer la velocidad en baudios y otras cosas, pero eso es esencialmente todo lo que hay.

En Windows, abre el puerto serie como un archivo, pero debe usar algunas formas particulares de acceder que son ligeramente diferentes de las que Python usa para los archivos normales. Lamentablemente, es difícil acceder con éxito a un puerto serie de Windows utilizando solo bibliotecas nativas de Python.

La biblioteca pyserial proporciona una forma uniforme y multiplataforma de acceder a los puertos serie. Se basa en ctypes, que está en la biblioteca estándar desde Python 2.5, por lo que puede incluir pyserial con su aplicación y solo usar eso.

+0

¿Puede describir un poco más cuáles son las diferencias, o tal vez incluso mejor darme una pista sobre dónde buscar? Intenté googlearlo, pero no pude encontrar nada más que pySerial. – martiert

+0

Una de las diferencias es que en Windows, debe leer y escribir el dispositivo de puerto serie utilizando las funciones API de Win32 'ReadFile' y' WriteFile', en el modo * overlapped I/O *. Hacer esto correctamente generalmente implica crear hilos separados para manejar la lectura y la escritura. Como 'pyserial' hace todo esto y es de código abierto, puedes mirar dentro para ver qué hace. Su último recurso puede ser "hacer exactamente lo que' pyserial' hace ". –

0

Dice que no tiene acceso para instalar nada nuevo. Supongo que es un problema de permisos, es decir, no se puede obtener acceso de administración elevado y la instalación de pip install/conda falla.

Si tiene algún tipo de acceso de usuario normal al acceso a la máquina (que supongo que debe tener directa o indirectamente para poner la secuencia de comandos en la máquina en primer lugar), puede usar un entorno virtual para instalar los módulos que necesitas Todo esto se puede hacer desde una cuenta de usuario normal.

Simplemente Google para "entorno virtual de python" y encontrará todo lo que necesita.

Si usa Anaconda Python, es un poco diferente. Google para "ambiente de conda".

Si ni siquiera puede obtener un símbolo del sistema en la PC host, p. Ej. usted cierra los archivos y se los entrega a otra persona para que los implemente; puede todavía usar un entorno virtual. Simplemente tendrá que comprimir el entorno virtual junto con su script. Con Anaconda puede organizar que el entorno se cree en el mismo directorio que su proyecto utilizando el modificador -p. Supongo que pipenv tiene algo similar.

O puede empaquetar todo con pyinstaller, lo que crea un tiempo de ejecución independiente con todos los módulos incluidos.

Cuestiones relacionadas