私は基本的に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?