我正在使用 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+
)。
谢谢!
将
width
的
SSHClient.invoke_shell
参数设置为大于80
的默认值:
channel = token.invoke_shell(width=160)
虽然更好的方法可能是使用
COLUMN
环境变量。
无论如何,您通常不应使用
SSHClient.invoke_shell
来自动执行命令。使用`SSHClient.exec_command。请参阅Paramiko 上的 exec_command 和使用 invoke_shell() 发送有什么区别?