Py学习  »  Python

从python3中的字符串中获取特定文本

Alexander Do • 5 年前 • 1561 次点击  

我现在开始用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)。最好的办法是什么?

同时,最好同时返回这两个或有两个单独的函数。一个叫“获取空闲内存”和“获取可用内存”?

谢谢您!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40068
 
1561 次点击  
文章 [ 3 ]  |  最新文章 5 年前
Xin Wang
Reply   •   1 楼
Xin Wang    6 年前

如果你只是需要 total free 列,可以返回元组。

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])
dvitsios
Reply   •   2 楼
dvitsios    6 年前

当你打电话 mem_stats.split() mem_stats 串成一个列表。

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

mem_fields = mem_stats.split()

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

根据你所说的,我不明白你为什么要做任何字符串解析来得到你需要的字段。

Dalvenjia
Reply   •   3 楼
Dalvenjia    6 年前

只是使用 str.split() 和赋值给变量,还有一个默认的第二个参数可以帮助您处理唯一的total/free avail场景

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