【问题标题】:Get rid of ['\n'] in python3 with paramiko用 paramiko 去掉 python3 中的 ['\n']
【发布时间】:2016-08-24 12:08:29
【问题描述】:

我刚开始用 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 中看到的结果?

【问题讨论】:

    标签: python python-3.x output special-characters paramiko


    【解决方案1】:

    .readlines() 返回一个由单独的行组成的 list。在您的情况下,只有一行,您可以通过索引列表来提取它,然后在末尾去除空格:

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

    然而,这仍然是一个字符串。如果您期望数字,则必须将字符串转换为float()。由于您的命令行只会返回 one 行,因此您也可以使用 .read() 并将其直接转换(无需剥离,因为 float() 可以容忍尾随和前导空格) :

    result = float(stdout.read())
    

    【讨论】:

      【解决方案2】:

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

      您可以为此使用列表推导:

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

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

      【讨论】:

        猜你喜欢
        • 2018-10-11
        • 1970-01-01
        • 2019-08-19
        • 2010-09-16
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        • 2014-06-20
        • 1970-01-01
        相关资源
        最近更新 更多