我刚刚开始在Python 3中编写一个监控工具,我想知道我是否可以得到一个清晰的''通过ssh输出数字。我写过这个剧本:
import os
import paramiko
command = 'w|grep \"load average\"|grep -v grep|awk {\'print ($10+$11+$12)/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中看到结果?
答案 0 :(得分:3)
.readlines()
会返回单独行的列表。在你的情况下只有一行,你可以通过索引列表来提取它,然后在最后剥去空白:
firstline = stdout.readlines()[0].rstrip()
然而,这仍然是一个字符串。如果您需要数字,则必须将字符串转换为float()
。由于您的命令行只返回一个行,您也可以使用.read()
并将其直接转换(无需删除,因为float()
可以容忍尾随和领先的空白):
result = float(stdout.read())
答案 1 :(得分:1)
而不是print(stdout.readlines())
你应该迭代stdout.readlines()
和strip
返回的列表中的每个元素,也可能将其转换为float
(取决于什么)你打算稍后处理这些数据。)
您可以使用列表理解:
print([float(line.strip()) for line in stdout.readlines()])
请注意,strip
将从字符串的开头和结尾删除空格和换行符。如果您只想删除尾随空格/换行符,则可以使用rstrip
,但请注意,转换为float
可能会失败。