[问题] pexpect的send()出现Invalid argument错误

楼主: hcl012 (怪龙-卡西欧鲁)   2019-11-27 15:51:28
我试着使用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接住之类的?
用错误讯息搜了一下文但是似乎这种案例不多见所以没什么收获...
在此先感谢愿意帮忙的各位

Links booklink

Contact Us: admin [ a t ] ucptt.com