Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在命令之间暂停SSH shell中运行Paramiko的Python脚本,以允许完全转储_Python_Ssh_Paramiko - Fatal编程技术网

在命令之间暂停SSH shell中运行Paramiko的Python脚本,以允许完全转储

在命令之间暂停SSH shell中运行Paramiko的Python脚本,以允许完全转储,python,ssh,paramiko,Python,Ssh,Paramiko,在下一个命令写入之前,我正在努力从命令中写入完整的结果(至少我怀疑这是正在发生的事情) 我编写了一个Python脚本,使用Paramiko将SSH连接到Cisco交换机,并从名为“cmdlist.txt”的种子列表中执行一系列命令 开始脚本 停止脚本 我使用了“time.sleep()”延迟,但它不能阻止长命令在前一个命令上写入 是否有一种方法可以让脚本在命令完成所需的时间内暂停,然后在脚本完成编写所有内容后继续 谢谢你的帮助 我不熟悉paramiko API,但是如果您在unix机器上(或使用

在下一个命令写入之前,我正在努力从命令中写入完整的结果(至少我怀疑这是正在发生的事情)

我编写了一个Python脚本,使用Paramiko将SSH连接到Cisco交换机,并从名为“cmdlist.txt”的种子列表中执行一系列命令

开始脚本 停止脚本 我使用了“time.sleep()”延迟,但它不能阻止长命令在前一个命令上写入

是否有一种方法可以让脚本在命令完成所需的时间内暂停,然后在脚本完成编写所有内容后继续


谢谢你的帮助

我不熟悉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)