我已经编写了以下代码,以交互方式在远程服务器中运行3命令
但是当我检查第3个命令从未执行且代码卡在这里是我的代码
def execute():
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('ipaddress', username='user', password='pw')
chan = ssh.invoke_shell() # start the shell before sending commands
chan.send('cd /path to folder/test')
chan.send('\n')
time.sleep(3)
chan.send("ls -l")
chan.send('\n')
buff = ''
while not buff.endswith("test >"):
resp = chan.recv(9999)
# code stuck here after 'path to folder/test >' comes in shell prompt
buff += resp
print resp
print "test"
chan.send("ls -lh")
chan.send('\n')
time.sleep(5)
buff = ''
while not buff.endswith("test >"):
resp = chan.recv(9999)
buff += resp
print resp
if __name__ == "__main__":
execute()
当我跑步时,我得到ls -l
的输出,但是ls -lh
从未执行过我的代码卡在第一次循环中。任何人都可以帮助解决我的问题
答案 0 :(得分:1)
代码有以下2个错误:
对channel.recv
的调用是阻止的,您首先应使用channel.recv_ready()
检查频道是否有任何数据要读取
也不要使用buff.endswith("test >")
作为条件
file_name可能并不总是在buff中的最后一个。
将while块更改为以下,它将以您想要的方式运行
while "test >" not in buff:
if chan.recv_ready():
resp = chan.recv(9999)
# code won't stuck here
buff+=resp
print resp