我有一個對象。爲什麼strip()修復這個pexpect腳本?
此對象有一個產生pexpect進程的方法connect()
。
產生的過程是一個自定義串行接口。在發佈時,這款工具打印串口設備的菜單來連接,像這樣:
libftdi device (0): A6005jpt libftdi device (1): acFX9DQf Serial device (a) : /dev/cu.Bluetooth-PDA-Sync Select a device by its letter (^D to abort):
我connect()
決定通過基於給定的設備名(如「acFX9DQf」)哪個號碼:(self.connection是Pexpect的產卵)
USBSERIAL_DEVICE_NAME = "acFX9DQf"
try:
while self.connection.expect(['libftdi device \(([0-9])\): (.*)','Serial device']) == 0:
if self.connection.match.group(2).strip() == USBSERIAL_DEVICE_NAME:
# do stuff
except:
# do stuff
現在,我的問題是,在我的主要邏輯我connect()
/kill()
過程多次,有時,這樣的一個時期,connect()
決定拋出一個異常pexpect.TIMEOUT
,意外。
例如,當我添加下面的調試語句,以我的邏輯,像這樣:
USBSERIAL_DEVICE_NAME = "acFX9DQf"
try:
while self.connection.expect(['libftdi device \(([0-9])\): (.*)','Serial device'], timeout=10) == 0:
print "MATCHED A DEVICE LINE!"
if self.connection.match.group(2).strip() == USBSERIAL_DEVICE_NAME:
print "MATCHED THE DESIRED USBSERIAL..."
...我得到這個輸出的connect()
很多電話:
libftdi device (0): A6005jpt MATCHED A DEVICE LINE! libftdi device (1): acFX9DQf MATCHED A DEVICE LINE! MATCHED THE DESIRED USBSERIAL... Serial device (a) : /dev/cu.Bluetooth-PDA-Sync Select a device by its letter (^D to abort): 1
...然後,我的一個connect()
來電會意想不到地發生....
libftdi device (0): A6005jpt MATCHED A DEVICE LINE! libftdi device (1): acFX9DQf Serial device (a) : /dev/cu.Bluetooth-PDA-Sync Select a device by its letter (^D to abort): MATCHED A DEVICE LINE! <<EXCEPTION>>
但是,如果我修改我的代碼如下:
try:
while self.connection.expect(['libftdi device \(([0-9])\): (.*)','Serial device'], timeout=10) == 0:
devicename = self.connection.match.group(2).strip()
if devicename == USBSERIAL_DEVICE_NAME:
# do stuff
我的問題,走開!我可以反覆運行,不會出現任何問題 - 沒有例外,沒有任何問題。
那麼在這裏呢?我甚至不知道從哪裏開始解決這個問題。
好吧,你有什麼異常,以及哪些變化修復了它? – Gabe 2011-05-26 03:11:47
當您介紹'devicename'時,輸出是否與第一個代碼失敗時相同(即提示後出現「MATCHED A DEVICE LINE!」)? – outis 2011-05-26 06:37:51
@加貝 - 我得到一個pexpect.TIMEOUT。 – eastydude5 2011-05-26 16:54:14