依据指定的 ``iface`` 名, 来获取程序运行需要的唯一ID

    - iface 为空, 则自动从系统选择第一个可用的网络接口 mac
    - 顺序,自动获取编号最小的网络接口:
        + macosx: en0~n
        + linux: eth/wlan(0~n)

    :param iface: ``系统中的网络接口名``
    :type iface: str
    :return:
    :rtype:

def app_id(iface=''):
    """ 依据指定的 ``iface`` 名, 来获取程序运行需要的唯一ID

    - iface 为空, 则自动从系统选择第一个可用的网络接口 mac
    - 顺序,自动获取编号最小的网络接口:
        + macosx: en0~n
        + linux: eth/wlan(0~n)

    :param iface: ``系统中的网络接口名``
    :type iface: str
    :return:
    :rtype:
    """
    if iface:
        return uniqid(iface)

    if platform.system() == 'Darwin':
        _ava_start = ['en']
    elif platform.system() == 'Linux':
        _ava_start = ['eth', 'wla']
    else:
        return None

    nics = psutil.net_if_addrs()
    _ifces = list(nics.keys())
    _ifces.sort()

    for _ in _ifces:
        if _[:len(_ava_start[0])] in _ava_start:
            return uniqid(_)