import sys def parse_args(argv=None): """ Returns a tuple of (args, kwargs) from a given list of command line arguments. """ argv = argv if argv else sys.argv print(argv) args = [] for arg in argv: if arg.startswith('-'): break args.append(arg) argv = argv[len(args):] kwargs = {} values = [] for arg in argv: if not arg.startswith('-'): values.append(arg) else: if len(values): kwargs[key] = values values = [] key = arg.lstrip('-').replace('-', '_') if arg.startswith('--'): if '=' in arg: key, value = arg.split('=') values.append(value) kwargs[key] = values else: kwargs[key] = True elif arg.startswith('-'): for k in key: kwargs[k] = True if len(values): kwargs[key] = values return (args, kwargs) if __name__ == '__main__': args, kwargs = parse_args([ '/home/pat/Git/pargs/pargs.py', 'command', 'positional', '--flag', '--optional=value', 'test', '--output', 'filename', '-flg' ]) print(args) print(kwargs)