[問題] pexpect的send()出現Invalid argument錯誤

看板Python作者 (怪龍-卡西歐魯)時間5年前 (2019/11/27 15:51), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
我試著使用pexpect來實作透過Serial over LAN遠端操作電腦的功能 程式的寫法大致如下: #建立SOL連線的IPMI指令 ipmicommand = r'ipmitool.exe -I lanplus -U ' + username + ' -P ' + password + ' -H ' + BMC_IP + ' sol activate' #用pexpect下指令 child = pexpect.popen_spawn.PopenSpawn(ipmicommand) #重複等待'Press <ESC> to enter setup'出現在畫面上 #一旦出現在畫面上就脫離while迴圈 index = child.expect(['Press <ESC> to enter setup', pexpect.EOF, pexpect.TIMEOUT], timeout = 1) while index != 0: child.send("") index = child.expect(['Press <ESC> to enter setup', pexpect.EOF, pexpect.TIMEOUT], timeout = 1) #送出ESC鍵 child.send("\x1b") 目前我用這個寫法在測試運行的時候大致上是沒有問題的 程式可以順利偵測到螢幕上的特定字串,並且送出我想要的按鍵 但是大約有一到兩成左右的機率會在任意一個child.send()出現下面這錯誤 Traceback (most recent call last): File "C:\xxxxxx\xxx.py", line xx, in xxx child.send(xxx) File "C:\xxxxxx\Python\Python37\lib\site-packages\pexpect\popen_spawn.py", line 142, in send return self.proc.stdin.write(b) OSError: [Errno 22] Invalid argument 想請問一下,有人知道這種錯誤的成因或是偵錯法嗎? 目前有點懷疑是SOL斷線導致送出失敗,但是苦無根據 另外也想問一下,有辦法即使出了這個錯,依然讓程式繼續運轉而不要跳出來嗎? 例如能不能用某種exception接住之類的? 用錯誤訊息搜了一下文但是似乎這種案例不多見所以沒什麼收穫... 在此先感謝願意幫忙的各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.150.181 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1574841103.A.21D.html
文章代碼(AID): #1TtYiF8T (Python)
文章代碼(AID): #1TtYiF8T (Python)