【问题标题】:Output of command executed with Paramiko invoke_shell() is paginated (getting "--more--" in recv)使用 Paramiko invoke_shell() 执行的命令的输出是分页的(在 recv 中获得“--more--”)
【发布时间】:2015-11-07 01:53:30
【问题描述】:

我有一个命令 XYZ 使用 sendall() 通过频道发送

channel = ssh.invoke_shell()
channel.sendall('XYZ\n')
response = channel.recv(2000)

我应该有整个输出,但是我注意到在我收到的输出的最后一行,最后有一个--more--。就像你使用less 命令时得到的一样。

因此,通道仍在等待更多输出,因为缓冲区不是空的(预计会有更多输出),并且命令希望我按 SPACE 以显示更多输出。

频道永远等待。

如何一次性获得全部输出?我不想要那个--more--

增加缓冲区大小没有区别。

【问题讨论】:

    标签: python ssh paramiko channel


    【解决方案1】:

    使用exec_command,而不是invoke_shell + sendall

    invoke_shell(带有默认参数)模拟交互式 80x24 终端。是什么让你正在执行的命令做一些花哨的事情,比如分页。

    def invoke_shell(self, term='vt100', width=80, height=24, width_pixels=0,
                     height_pixels=0):
    

    exec_command(带有默认参数,即get_pty=False)使用非交互式终端。什么应该使命令(如果实施得当)避免进行分页。

    def exec_command(self, command, bufsize=-1, timeout=None, get_pty=False):
    

    如果上述方法无法帮助删除 --more--,并且您正在连接到 Cisco 设备,则向设备发送以下命令可能会有所帮助:

    terminal length 0
    

    另见How to proceed with the word "MORE" to get to the end of the command

    【讨论】:

    • 这有帮助。我最终在 invoke_shell() 调用中更改了宽度和高度。
    • 我也不推荐你的解决方案。这是一个 hack,不是正确的解决方案。
    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2020-01-30
    • 2022-01-10
    相关资源
    最近更新 更多