python paramiko timeout for命令

时间:2014-11-01 19:25:31

标签: python ssh paramiko

我需要paramiko(python)的一些帮助。我有一个非标准SSH接口的服务器,所以我使用交互模式,我在同一个通道下运行几个命令(exec_command不适合我)。一切都很好但是我想在每个命令中引入一些超时,因为当没有收到数据时应用程序保持在while循环中。 Channel.settimeout似乎无法正常工作,因为第一个命令后应用程序超时。由于线程,我无法使用信号。当我使用time()来计算数据变量为空之后的时间时,我注意到整个代码执行都挂起,很可能等待通道数据。任何建议如何解决这个问题将受到高度赞赏。

    ssh=paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        connect = ssh.connect(host,username=,password=,timeout=20)
        file=open("test.txt","w+")
        channel = ssh.invoke_shell()
        data = channel.recv(5000)
        set_of_commands = ["cmd\n","reset\n"]

        while set_of_commands is not None:

            file.write(data)
            # New command might be executed here if we have 'system:'
            if re.match("system:",data) is not None:
                try:
                    command=set_of_commands.pop()
                    channel.send(command)
                except:
                    break
            data=channel.recv(5000)

1 个答案:

答案 0 :(得分:0)

你可能会在下面使用每个命令的超时。 我已经参考了这篇文章。 Python Paramiko timeout with long execution, need full output

chan = ssh.get_transport().open_session()

cmd = "timeout {0} {1}\n".format(timeouttime, cmd)

chan.exec_command(cmd)