使用 Paramiko invoke_shell 时结果被截断

问题描述 投票:0回答:1

我正在使用 Paramiko

invoke_shell
从远程系统提取
top
命令的结果。但在查看结果时,我的行被截断了。

代码如下:

channel = token.invoke_shell()

channel.send ('terminal length 0\n')
time.sleep(1)
resp = channel.recv(9999)
output = resp.decode('ascii')

channel.send('top -n 1\n')
time.sleep(1)
resp = channel.recv(9999)
output = resp.decode('ascii')
result = (''.join(output))

return (result)

结果如下(注意

cn_node+
不是完整的名字,比较长):

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
  28639 root      20   0   17.0g  38912  28336 S 111.1   0.1   1101:49 cn-node+
  29889 root      20   0 3379668  16532  13428 S  94.4   0.1 991:39.71 Flare

如果直接 ssh 进入系统并运行命令,结果是:

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
  28639 root      20   0   17.0g  38912  28336 S 116.7   0.1   1186:17 cn-node-cnfp
  29889 root      20   0 3379668  16796  13428 S  94.4   0.1   1067:53 Flare

想知道如何获取整行而不是截断的行(获取

cn-node-cnfp
而不是
cn-node+
)。

谢谢!

python ssh paramiko
1个回答
2
投票

width
SSHClient.invoke_shell
参数设置为大于
80
的默认值:

channel = token.invoke_shell(width=160)

虽然更好的方法可能是使用

COLUMN
环境变量。

参见 Linux:如何不根据屏幕宽度限制顶部输出


无论如何,您通常不应使用

SSHClient.invoke_shell
来自动执行命令。使用`SSHClient.exec_command。请参阅Paramiko 上的 exec_command 和使用 invoke_shell() 发送有什么区别?

© www.soinside.com 2019 - 2024. All rights reserved.