我想连接到运行 CLISH 的服务器,在给出密码提示时提供密码(有效),然后发出“shell”命令将我撞到 bash shell(有效),然后测试文件是否存在如果它丢失,则打印“true”,如果它存在(有效),则打印“”(空字符串)。
不起作用的是我正在使用“pexpect.before”读回我的脚本。我已经要求 pexpect 期待基本提示,然后给我“之前”,据我了解:“在提示匹配之前,您在屏幕上看到了什么?” 我不仅按预期获得了“true”或“”(空字符串),而且还获得了我发出的用于测试文件是否存在的命令。
例如,如果我直接通过 SSH 连接到机器,我会这样做: 密码:
我的脚本返回的是命令和响应(问题和答案):
[ ! -f '/etc/logrotate.d/nginx' ] && echo 'true'
true
我只想要响应,要么是“真”,要么是“”。我得到了响应,但我也得到了发出的命令。
你能看出我做错了什么吗?请帮忙!我想继续使用 pexpect,因为我对 SSH 会话有更复杂的“期望”。
这是我的代码:
def connection(cmd):
msg_newkey = 'Are you sure you want to continue connecting'
p=pexpect.spawn('ssh '+user+'@'+host)
msg = '''Super long welcome message containing your canned warning message, etc.
myuser@'''+myhost+''''s password:'''
i=p.expect([msg_newkey,'password:',pexpect.EOF])
if i==0:
print "Accepting key."
p.sendline('yes')
i=p.expect([msg_newkey,'password:',pexpect.EOF])
if i==1:
print "Supplying password"
p.sendline(passwd)
elif i==2:
if "No route to host" in p.before:
return p.before
else:
pass # Add no functionality, just saying "move on"
i=p.expect(['MYCLISHPROMPT>',pexpect.EOF])
if i==0:
p.sendline('shell')
i=p.expect(['.*@.*\$',pexpect.EOF])
if i==0:
p.sendline(cmd)
p.expect(['myuser@myhost:',pexpect.EOF])
return p.before
def look_for_file(step, filename, mytest):
cmd = "[ ! -f '"+filename+"' ] && echo '"+mytest+"'"
results = connection(cmd)
print "***"+str(result)+"***"
assert (results == '' or results == 0), "Step failed! Error: "+results