我目前正在开始使用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?
谢谢!
答案 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)
如果只需要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])