在命令之间暂停SSH shell中运行Paramiko的Python脚本,以允许完全转储
在下一个命令写入之前,我正在努力从命令中写入完整的结果(至少我怀疑这是正在发生的事情) 我编写了一个Python脚本,使用Paramiko将SSH连接到Cisco交换机,并从名为“cmdlist.txt”的种子列表中执行一系列命令 开始脚本 停止脚本 我使用了“time.sleep()”延迟,但它不能阻止长命令在前一个命令上写入 是否有一种方法可以让脚本在命令完成所需的时间内暂停,然后在脚本完成编写所有内容后继续在命令之间暂停SSH shell中运行Paramiko的Python脚本,以允许完全转储,python,ssh,paramiko,Python,Ssh,Paramiko,在下一个命令写入之前,我正在努力从命令中写入完整的结果(至少我怀疑这是正在发生的事情) 我编写了一个Python脚本,使用Paramiko将SSH连接到Cisco交换机,并从名为“cmdlist.txt”的种子列表中执行一系列命令 开始脚本 停止脚本 我使用了“time.sleep()”延迟,但它不能阻止长命令在前一个命令上写入 是否有一种方法可以让脚本在命令完成所需的时间内暂停,然后在脚本完成编写所有内容后继续 谢谢你的帮助 我不熟悉paramiko API,但是如果您在unix机器上(或使用
谢谢你的帮助 我不熟悉paramiko API,但是如果您在unix机器上(或使用cygwin的windows),您是否考虑过使用
子流程。检查\u call
以执行ssh命令?您可能会发现了解-t开关很有用。事实上,如果您这样做,我建议您使用类似child=subprocess.Popen([“sh”,“-c”,shell_命令),stdout=subprocess.PIPE,stderr=subprocess.stdout)
然后child.communicate()
的方法来获取输出。我还注意到您似乎在阅读带有尾随换行符的CMD(如果存在-文件中的最后一行可能缺少它),然后附加第二个换行符,看起来是错误的吗?
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
chan = ssh.invoke_shell()
TERM_WIDTH = 'terminal width 250\n'
TERM_LENGTH = 'terminal length 0\n'
chan.send(TERM_WIDTH)
time.sleep(1)
chan.send(TERM_LENGTH)
time.sleep(1)
with open('cmdlist.txt') as CMDLIST:
for CMD in CMDLIST:
COMMAND = '{}\n'.format(CMD)
chan.send(COMMAND)
time.sleep(30)
COMMAND_Ret = chan.recv(9999)
COMMAND_Ret = COMMAND_Ret.decode('utf8')
COMMAND_Ret = StripLastLine(COMMAND_Ret)
if set ('^').intersection(COMMAND_Ret):
COMMAND = COMMAND.rstrip()
FAILURE = '\nCOMMAND {} FAILED.\n\n\n'.format(COMMAND)
RESULTS.write(FAILURE)
else:
COMMAND = COMMAND.rstrip()
RESULTS.write(COMMAND_Ret)