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

如何在Python中将命令行跳过为变量,python,powercfg,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-xx

我想使用以下命令:

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) *

这很好。但是,我只希望中间的变量在没有所有额外文本的情况下进入它们自己的变量。问题是命令以多行形式出现,因此我无法使用
(列表[19:55])
。我还需要将括号内的每个字符串放入它们自己的变量中,但我想我可以解决这个问题。我是Python新手,所以我对任何东西都持开放态度。

找到了答案,尽管我的标题措词不好,但我希望有人能找到,因为想弄明白这一点真是费劲。您所要做的就是更改结尾处的数字,使其向下移动:

firstplan=subprocess。检查输出([“powercfg”,“-list”],shell=True)。拆分('\n')[3]

secondplan=subprocess。检查输出([“powercfg”,“-list”],shell=True)。拆分('\n')[4]

等等

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

firstplanID=((firstplan.split(“:”)[1]。split(“(”[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'
]

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

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部分和类型部分。结果是一个元组列表。每个元组都是一个模式匹配。

好的,将检查输出返回的行拆分并逐个处理。@Jean-Françoisfare Ok,所以我尝试了
list=subprocess。检查输出([“powercfg”,“-list”])。拆分行()
它在一行中提供了所有内容,我不知道如何从中提取所需的字符串。您要提取哪些部分?xxx还是括号中的文本?@aaldlai理想情况下,我想要两者,但我需要xxx的第一个。好吧,现在我有了
打印(list.splitlines())
并且每一行都是自己的字符串。那么现在如何分别使用它们呢?