用 paramiko 去掉 python3 中的 ['\n']

Get rid of ['\n'] in python3 with paramiko

刚开始在Python3写一个监控工具,想知道能不能通过ssh得到一个'clear'的数字输出。我写了这个脚本:

import os
import paramiko

command = 'w|grep \"load average\"|grep -v grep|awk {\'print (++)/3*100\'};'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy( paramiko.AutoAddPolicy())
ssh.connect('10.123.222.233', username='xxx', password='xxx')
stdin, stdout, stderr = ssh.exec_command(command)
print (stdout.readlines())
ssh.close()

它工作正常,除了输出是:

['22.3333\n']

我怎样才能去掉 ['\n'] 而只得到清晰的数值?

如何获得在 PuTTy 中看到的结果?

而不是 print(stdout.readlines()) 您应该遍历列表中由 stdout.readlines()strip 返回的每个元素,也可能将其转换为 float (取决于您以后打算如何处理这些数据)。

您可以为此使用列表理解:

print([float(line.strip()) for line in stdout.readlines()])

请注意,strip 将从字符串的开头和结尾删除空格和换行符。如果您只想删除结尾的 whitespace/new-line 字符,则可以使用 rstrip,但请注意,转换为 float 可能会失败。

.readlines() returns 一个 list 单独的行。在你的情况下只有一行,你可以通过索引列表来提取它,然后在末尾去掉空格:

firstline = stdout.readlines()[0].rstrip()

但是,这仍然是一个字符串。如果您希望 numbers,则必须将字符串转换为 float()。由于您的命令行只会 return 一个 行,您不妨使用 .read() 并直接转换它(不需要剥离,因为 float() 容忍尾随和前导空格):

result = float(stdout.read())