pyserial - отправка параметров во время выполнения - ввод против raw_input - недостаток безопасности? - PullRequest
0 голосов
/ 09 февраля 2010

Я пишу программу, которая открывает и записывает данные, отправленные через последовательный порт, в текстовый файл. В настоящее время я добавляю функции, позволяющие перенастроить последовательный порт во время выполнения. Я предлагаю пользователю выбрать, какую переменную менять по одному, чтобы она была для меня простой (я также был бы признателен за элегантные решения).

Функция pyserial, которая создает последовательный экземпляр (serial.Serial ()), имеет следующие параметры:

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

Я заметил, что хотя большинство из них являются аргументами типа int (), некоторые из них не являются, то есть "timeout".

Я знаю, что использование int(raw_input("for the int() type variables)) позволило бы мне безопасно назначить переменные int, но переменные с None по умолчанию потребовали бы функции input() для правильного присвоения возможного значения None.

Я читал в другом месте, что input (), как правило, не рекомендуется, так как он потенциально может быть использован (что-то с eval ()?). Как тогда я должен обрабатывать эти входы? то есть, используя serial.Serial (), где writeTimout = str (None) выдает ошибку.

Спасибо!

1 Ответ

0 голосов
/ 09 февраля 2010

Самый безопасный способ - просто принять ввод пользователя в виде строки и затем проанализировать его. То есть позволить пользователю ввести пары ключ = значение:

baudrate = 9600
parity = N

Затем разберите эти пары, разделив их на '=' и очистив обе стороны. Присвойте переменные таблице поиска строк (строка baudrate отображается на переменную baudrate и т. Д.). Таким образом, вы можете обработать значение None любым удобным для вас способом.

Этот метод прост и безопасен. input вызовет исключения, если пользовательский ввод не является допустимым Python, и вы можете этого не хотеть.

...