如何在python中实现呢?

时间:2019-08-28 06:53:33

标签: python python-2.7

我的字符串列表如下,

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可能不会一直都有尾随空间。

1 个答案:

答案 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')