从 Python3 中的字符串中抓取某些文本
Grabbing certain text from a string in Python3
我目前正在 Python 中开始编写更多脚本,需要一些帮助!我有一个 returns 来自服务器的一些统计数据的功能。目前我的职能:
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
returns
Mem: 991M 71M 757M 12M 162M 751M
我想进一步解析此输出中的有用信息并获取总内存 (991M) 和可用内存 (757M)。执行此操作的最佳方法是什么?
另外 return 两者都更好还是有两个独立的功能。一个叫做 get_free_memory 和 get_available_memory?
谢谢!
当您调用 mem_stats.split()
时,您会将 mem_stats
字符串中所有以空格分隔的值放入列表中。
因此,如果您感兴趣的值是第二个和第四个元素(考虑到 'Mem:' 也是您初始字符串的一部分),您可以从该列表中访问它们:
mem_fields = mem_stats.split()
total_mem = mem_fields[1]
avail_mem = mem_fields[3]
根据你所说的,我不明白为什么你应该进行任何字符串解析来获取你需要的字段。
如果您只需要 total
和 free
列,您可以 return 一个元组。
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])
只需使用 str.split()
并分配给变量,第二个默认参数也可以帮助您解决唯一的 total/free 可用场景
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
编辑:
我不知道你用这些信息做什么,但对我来说 return 所有数据的字典并稍后使用它似乎更有用
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
我目前正在 Python 中开始编写更多脚本,需要一些帮助!我有一个 returns 来自服务器的一些统计数据的功能。目前我的职能:
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
returns
Mem: 991M 71M 757M 12M 162M 751M
我想进一步解析此输出中的有用信息并获取总内存 (991M) 和可用内存 (757M)。执行此操作的最佳方法是什么?
另外 return 两者都更好还是有两个独立的功能。一个叫做 get_free_memory 和 get_available_memory?
谢谢!
当您调用 mem_stats.split()
时,您会将 mem_stats
字符串中所有以空格分隔的值放入列表中。
因此,如果您感兴趣的值是第二个和第四个元素(考虑到 'Mem:' 也是您初始字符串的一部分),您可以从该列表中访问它们:
mem_fields = mem_stats.split()
total_mem = mem_fields[1]
avail_mem = mem_fields[3]
根据你所说的,我不明白为什么你应该进行任何字符串解析来获取你需要的字段。
如果您只需要 total
和 free
列,您可以 return 一个元组。
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])
只需使用 str.split()
并分配给变量,第二个默认参数也可以帮助您解决唯一的 total/free 可用场景
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
编辑: 我不知道你用这些信息做什么,但对我来说 return 所有数据的字典并稍后使用它似乎更有用
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