pyserial- envoyer des paramètres à l'entrée runtime- contre raw_input - faille de sécurité?
-
19-09-2019 - |
Question
Je suis en train d'écrire un programme qui ouvre et enregistre les données envoyées via un port série dans un fichier texte. Je suis actuellement l'ajout de fonctionnalités pour permettre la reconfiguration du port série au cours de l'exécution. Je demande à l'utilisateur de choisir la variable à changer un à la fois, afin de le garder simple pour moi (je vous serais reconnaissant des solutions élégantes ainsi).
La fonction pyserial qui crée l'instance série (serial.Serial ()) a les paramètres suivants:
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
Je remarque que, bien que la plupart sont des arguments int (), certains ne sont pas, à savoir « délai d'attente ».
Je sais que l'aide int(raw_input("for the int() type variables))
me permettent d'attribuer en toute sécurité les variables int, mais les variables avec aucun par défaut nécessiterait une fonction input()
pour affecter correctement la possible valeur Aucun.
J'ai lu ailleurs que l'entrée () est généralement pas recommandée, car elle a le potentiel d'être exploité (quelque chose eval ()?). Comment alors devrais-je gérer ces entrées? à-dire en utilisant serial.Serial () où writeTimout = str (Aucun) renvoie une erreur.
Merci!
La solution
La meilleure façon est juste d'accepter l'entrée de l'utilisateur comme une chaîne, puis l'analyser. C'est à dire. laisser l'utilisateur d'entrer paires clé = valeur:
baudrate = 9600
parity = N
analyser ensuite ces paires, par fractionnement sur « = » et le décapage des deux côtés. Affectez les variables avec une table de consultation de chaîne (les cartes de chaîne de baudrate
au baudrate
var, et ainsi de suite). De cette façon, vous pouvez gérer la valeur None
comme vous le souhaitez.
Cette méthode est simple et sûr. input
soulèvera des exceptions si l'entrée utilisateur n'est pas Python valide, et vous ne voulez pas que.