我的字符串列表如下,
flag_list = ['-Werror=unused-but-set-variable', '-Wall', '-D FIRMWARE_MAJOR_VERSON=0', '-D FIRMWARE_MINOR_VERSION=1', '-D _TASK_STD_FUNCTION', '-D DEBUG_ENABLE=1', '-D
ENABLE_DEBUG_MAIN=1', '-D ENABLE_DEBUG_OLED_UI=1', '-D ENABLE_TEST_FEATURES=1', '-D LED=1', '-DSERIAL_NUMBER=1234', '-DREQUIRESNEW']
我正在尝试实现一个函数,该函数可以帮助我获取已定义标志的值(如果可用)。
这是我尝试过的方法,我确信这不是最佳的方法。
def get_flag_value(flags_list, flag_name):
flag = [s for s in flags if flag_name + "=" in s]
flag_new = filter(lambda str: str.startswith("-D"), flag)
print flag_new
if (len(flag) == 1) :
print flag_name + " found."
print flag
# TODO: Check for the = sign.
# TODO: get value of parameter if available.
# return (result, value)
elif (len(flag) > 1) :
print "Multiple enteries found"
print flag
return (false, 0)
else:
print flag_name + " not found"
return (false, 0)
请注意,有时-D
可能不会一直都有尾随空间。
答案 0 :(得分:2)
我已经实现了代码。你可以试试看。
代码:
input_list = [
"-Werror=unused-but-set-variable",
"-Wall",
"-D FIRMWARE_MAJOR_VERSON=0",
"-D FIRMWARE_MINOR_VERSION=1",
"-D _TASK_STD_FUNCTION",
"-D DEBUG_ENABLE=1",
"-D ENABLE_DEBUG_MAIN=1",
"-D ENABLE_DEBUG_OLED_UI=1",
"-D ENABLE_TEST_FEATURES=1",
"-D LED=1",
"-DSERIAL_NUMBER=1234",
"-DREQUIRESNEW",
]
def get_flag_value(flag_name):
for item in input_list:
if flag_name in item:
return True, item.split("=")[-1]
return False, False
print(get_flag_value("ENABLE_DEBUG_OLED_UI"))
print(get_flag_value("SERIAL_NUMBER"))
print(get_flag_value("Wall"))
print(get_flag_value("Werror"))
print(get_flag_value("Fake_flag"))
输出:
>>> python3 test.py
(True, '1')
(True, '1234')
(True, '-Wall')
(True, 'unused-but-set-variable')
(False, False)
编辑:
使功能更强大。
代码:
def get_flag_value(flag_name):
for item in input_list:
item = item.replace("-D", "").strip()
if flag_name.lower() == item.split("=")[0].lower():
return True, item.split("=")[-1]
return False, False
print(get_flag_value("ENABLE_DEBUG_OLED_UI"))
print(get_flag_value("SERIAL_NUMBER"))
print(get_flag_value("-Wall"))
print(get_flag_value("-Werror"))
print(get_flag_value("Fake_flag"))
print(get_flag_value("LED"))
print(get_flag_value("REQUIRESNEW"))
输出:
>>> python3 test.py
(True, '1')
(True, '1234')
(True, '-Wall')
(True, 'unused-but-set-variable')
(False, False)
(True, '1')
(True, 'REQUIRESNEW')