2010-02-09 60 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