如何在Python中将命令行跳过为变量

时间:2018-08-05 19:57:57

标签: python powercfg

我要使用命令:

subprocess.check_output(["powercfg", "-list"])

这给了我

Existing Power Schemes (* Active)

-----------------------------------

Power Scheme GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  (Balanced)

Power Scheme GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  (High performance)

Power Scheme GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  (Power saver) *

这很好。但是,我只希望中间的变量进入自己的变量,而没有所有多余的文本。问题是命令以多行形式出现,所以我不能使用(list[19:55])。我还需要将括号内的每个字符串放入它们自己的变量中,但是我想我可以弄清楚这一点。我是Python的新手,所以我愿意接受任何东西。

3 个答案:

答案 0 :(得分:0)

找到了答案,即使我的标题措辞不佳,我还是希望有人能找到它,因为试图弄清楚它很麻烦。您所要做的就是在末尾更改数字以降低行数:

firstplan = subprocess.check_output(["powercfg", "-list"], shell=True ).split('\n')[3]

secondplan = subprocess.check_output(["powercfg", "-list"], shell=True ).split('\n')[4]

然后我继续使用以下方法“解析” ID字符串(如果这是正确的词):

firstplanID = ((firstplan.split(": "))[1].split(" (")[0])

,然后为每个计划手动设置一个变量。

答案 1 :(得分:0)

您可以尝试以下方法:

data = '''Existing Power Schemes (* Active)

-----------------------------------

Power Scheme GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  (Balanced)

Power Scheme GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  (High performance)

Power Scheme GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  (Power saver) *'''

values = [i.split()[3] for i in data.splitlines() if i.startswith('Power')]

结果:

>>> values
[
    'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
    'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
    'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
]

答案 2 :(得分:0)

您可以尝试使用正则表达式。

import re

pattern = "Power Scheme GUID: ([a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12})\s+\(([a-zA-Z ]+)\)"
mystr = "Existing Power Schemes (* Active)\n-----------------------------------\nPower Scheme GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  (Balanced)\nPower Scheme GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  (High performance)\nPower Scheme GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  (Power saver) *"

re.findall(pattern, mystr)
# results: [('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'Balanced'), ('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'High performance'), ('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'Power saver')]

给出一个字符串和一个模式,您可以找到字符串中与您的模式匹配的所有部分。在这种情况下,我创建了一个模式,并将id部分和type部分分组(使用括号)。结果是一个元组列表。每个元组都是一个模式匹配。