Generates a valid command line call for the executable given by call arguments in `kwargs`
    :param kwargs: values to call the executable
    :return: the command line
    :rtype: list

def cmdline(executable):
    """Generates a valid command line call for the executable given by call arguments in `kwargs`
    :param kwargs: values to call the executable
    :return: the command line
    :rtype: list
    """

    args = [executable.executable]
    indexed_args = []

    for parameter in executable:

        optional = (parameter.type == 'boolean') or parameter.default
        has_value = parameter.type != 'boolean'


        if parameter.longflag:  # use longflag where possible
            flag = "--%s" % parameter.longflag
        elif parameter.flag:
            flag = "-%s VALUE" % parameter.flag
        elif parameter.index:
            flag = parameter.name
            optional = False


        if has_value:
            flag += " VALUE"

        if optional:
            flag = "[" + flag + "]"

        if parameter.index:
            indexed_args.insert(int(parameter.index), flag)
        else:
            args.append(flag)

    return args + indexed_args