从Python3中的字符串中获取某些文本

时间:2019-03-15 22:51:41

标签: python python-3.x paramiko

我目前正在开始使用Python编写更多脚本,可能需要一些帮助!我有一个从服务器返回一些统计信息的函数。当前我的功能:

def get_free_memory(ssh_obj):
stdin, stdout, stderr = ssh_obj.exec_command('free -h')
mem_stats = stdout.readlines()[1]
mem_stats_formatted = " ".join(mem_stats.split())
return mem_stats_formatted

返回

Mem: 991M 71M 757M 12M 162M 751M

我想进一步解析此输出中的有用信息,并获得总内存(991M)和可用内存(757M)。最好的方法是什么?

也最好同时返回两个或具有两个单独的函数。一种叫做get_free_memory和get_available_memory?

谢谢!

3 个答案:

答案 0 :(得分:2)

调用mem_stats.split()时,会将mem_stats字符串中所有用空格分隔的值放入列表中。

因此,如果您感兴趣的值是第二和第四元素(考虑到“ Mem:”也是初始字符串的一部分),则可以从该列表中访问它们:

mem_fields = mem_stats.split()

total_mem = mem_fields[1] 
avail_mem = mem_fields[3]

根据您所说的内容,我看不到为什么您应该进行任何字符串解析以获取所需的字段。

答案 1 :(得分:1)

只需使用def get_free_memory(ssh_obj, raw=True): stdin, stdout, stderr = ssh_obj.exec_command('free -h') mem_stats = stdout.readlines()[1] if raw: mem_stats_formatted = " ".join(mem_stats.split()) return mem_stats_formatted else: _, total, used, free, shared, cache, avail = mem_stats_formatted.split() return total, avail # You may format this to a string if you wish 并分配给变量,默认的第二个参数也可以帮助您解决唯一的总可用/免费可用情况

def get_free_memory(ssh_obj):
    stdin, stdout, stderr = ssh_obj.exec_command('free -h')
    mem_stats = stdout.readlines()[1]
    _, total, used, free, shared, cache, avail = mem_stats_formatted.split()
    memory_info = {
                      'total': total,
                      'used': used, 
                      'free': free,
                      'shared': shared,
                      'cache': cache,
                      'available': avail
                  }

    return memory_info

编辑: 我不知道您如何处理此信息,但对我来说,返回所有数据的字典并在以后使用它似乎更有用

.*

答案 2 :(得分:0)

如果只需要totalfree列,则可以返回一个元组。

def get_free_memory(ssh_obj):
    stdin, stdout, stderr = ssh_obj.exec_command('free -h')
    mem_stats = stdout.readlines()[1]
    mem_stats_splitted = mem_stats.split()
    return (mem_stats_splitted[1], mem_stats_splitted[3])