2010-02-09 25 views
0

我正在编写一个程序,用于打开并记录通过串口发送到文本文件的数据。我目前添加了允许在运行时重新配置串口的功能。我提示用户选择一个变量,以便让自己变得简单(我会欣赏优雅的解决方案)。pyserial-在运行时发送参数 - 输入与raw_input - 安全缺陷?

创建串行实例的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()函数的参数,有些则不是,即“超时” 。

我知道使用int(raw_input("for the int() type variables))会让我安全地分配int变量,但将None作为默认值的变量需要使用input()函数来正确分配可能的None值。

我已经在其他地方看过,input()通常不被推荐,因为它有可能被利用(关于eval()?)。那么我应该如何处理这些投入?即使用serial.Serial(),其中writeTimout = str(None)引发错误。

谢谢!

回答

0

最安全的方法就是接受用户输入的字符串,然后解析它。即让用户输入键=值对:

baudrate = 9600 
parity = N 

然后通过拆分'='并剥离双方来解析这些对。用字符串查找表分配变量(baudrate字符串映射到baudrate var,依此类推)。通过这种方式,您可以以任何您想要的方式处理值None

该方法简单且安全。如果用户输入不是有效的Python,则input将引发异常,并且您可能不希望这样。

+0

我明白了,我现在就试试。 在查找表的两列(即字典?)中有一个文本文件是更好的办法,还是应该在程序运行时将其初始化?感谢您的时间 – PPTim 2010-02-09 18:42:14

+0

@PPTim:如果您正在讨论程序读取的配置文件,请使用Python的一些现有选项,如ConfigParser – 2010-02-10 03:44:15