pyserial- el envío de parámetros de entrada en tiempo de ejecución- vs raw_input - falla de seguridad?

StackOverflow https://stackoverflow.com/questions/2231249

Pregunta

Estoy escribiendo un programa que se abre y se registra los datos enviados a través de un puerto serie en un archivo de texto. Actualmente estoy añadiendo funcionalidad para permitir la reconfiguración del puerto serie en tiempo de ejecución. Me pedirá al usuario que seleccione qué variable para cambiar de uno en uno, a fin de que sea sencillo para mí (i agradecería soluciones elegantes, así).

La función PySerial que crea la instancia de serie (serial.Serial ()) tiene los siguientes parámetros:

import serial
ser = serial.Serial(port=0, baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0, writeTimeout=None, dsrdtr=None, interCharTimeout=None) #default values shown

Me he dado cuenta que, si bien la mayoría son int () argumentos, algunos no lo son, es decir, "tiempo de espera".

Sé usando int(raw_input("for the int() type variables)) me dejaba asigno de forma segura las variables int, pero las variables con Ninguno como predeterminado requeriría una función input() para asignar adecuadamente el posible valor Ninguno.

He leído en otro lugar que de entrada () por lo general no es recomendable, ya que tiene potencial para ser explotado (algo acerca de eval ()?). Y después ¿cómo manejar esas entradas? es decir, usando serial.Serial () donde writeTimout = str (Ninguno) emite un error.

Gracias!

¿Fue útil?

Solución

La forma más segura es sólo para aceptar la entrada del usuario como una cadena y luego analizarlo. Es decir. dejar que el usuario introduzca pares clave = valor:

baudrate = 9600
parity = N

A continuación, analizar estos pares, mediante la división en '=' y pelar ambos lados. Asignar las variables con una tabla de búsqueda de cadena (los mapas de cadena baudrate a la baudrate var, y así sucesivamente). De esta manera se puede controlar el valor None cualquier forma que desee.

Este método es sencillo y seguro. input se provoca excepciones si la entrada de usuario no es válida en Python, y puede que no quiera eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top