我正在寫一些pexpect的東西,基本上是通過telnet發送命令。捕捉在一個垂死的過程
但是,我的遠程登錄會話可能會死(由於網絡問題,電纜被拉,什麼都沒有)。
如何初始化一個telnet會話,如果它死了,我可以抓住它並告訴它重新連接,然後繼續執行它所在的代碼。
這可能嗎?
我正在寫一些pexpect的東西,基本上是通過telnet發送命令。捕捉在一個垂死的過程
但是,我的遠程登錄會話可能會死(由於網絡問題,電纜被拉,什麼都沒有)。
如何初始化一個telnet會話,如果它死了,我可以抓住它並告訴它重新連接,然後繼續執行它所在的代碼。
這可能嗎?
恕我直言,你常富裕與像exscript
或telnetlib
當前維護的庫,但在pexpect
高效的咒語是:
import pexpect as px
cmds = ['cmd1', 'cmd2', 'cmd3']
retcode = -1
while (retcode<10):
if (retcode<2):
child = px.spawn('telnet %s %s' % (ip_addr,port))
lregex = '(sername:)' # Insert regex for login prompt here
pregex = '(prompt1>)|(prompt2$)' # Insert your prompt regex here
# retcode = 0 for px.TIMEOUT, 1 for px.EOF, 2 for lregex match...
retcode = child.expect([px.TIMEOUT, px.EOF, lregex, pregex],timeout = 10)
if (retcode==2):
do_login(child) # Build a do_login() method to send user/passwd
elif (2<retcode<10) and (len(cmds)>0):
cmd = cmds.pop(0)
child.sendline(cmd)
else:
retcode = 10
我這樣做,和它的工作:
def telnet_connect():
print "Trying to connect via telnet..."
telnet_connecting = pexpect.spawn('telnet localhost 10023', timeout=2)
while 1:
try:
telnet_connecting.expect('login: ')
break
except:
telnet_connecting = telnet_connect()
break
return telnet_connecting
遞歸FTW?
當你發送任何東西上面登錄?無論你做什麼,你都需要考慮'pexpect'需要成對看'send' /'expect' ...... – 2011-04-09 05:25:49
使用咒語這個詞的+1:它使得編程聽起來像黑魔法。 – slezica 2011-04-09 03:16:12