python中的任意命令行参数

2024-09-30 00:35:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我想允许任意的命令行参数。如果用户提供的命令行如下所示

myscript.py --a valueofa --b valueofb posarg1 posarg2

我知道avalueofa一起传递,b与{}一起传递,我有最后两个位置参数。在

我一直使用optparse,您可以指定要查找的参数。但是我希望用户能够从命令行定义任意的“宏”。当然有一个python模块比我写的任何东西都要优雅。是什么?在


Tags: 模块命令行用户py参数定义optparsemyscript
3条回答

argparse会做你想做的吗?它最近被添加到标准库中。具体来说,您可能需要查看文档的this section。在

{很遗憾,你}。如果您必须支持此功能,则需要编写自己的选项parser=(。在

arbitrary_args.py

#!/usr/bin/env python3

import sys


def parse_args_any(args):
    pos = []
    named = {}
    key = None
    for arg in args:
        if key:
            if arg.startswith(' '):
                named[key] = True
                key = arg[2:]
            else:
                named[key] = arg
                key = None
        elif arg.startswith(' '):
            key = arg[2:]
        else:
            pos.append(arg)
    if key:
        named[key] = True
    return (pos, named)


def main(argv):
    print(parse_args_any(argv))


if __name__ == '__main__':
    sys.exit(main(sys.argv[1:]))

$./arbitrary_args.py cmd posarg1 posarg2 foo bar baz posarg3 quux

(['cmd', 'posarg1', 'posarg2', 'posarg3'], {'foo': True, 'bar': 'baz', 'quux': True})

argparse_arbitrary.py

^{pr2}$

$./argparse_arbitrary.py -Ddrink=coffee -Dsnack=peanut

{'snack': 'peanut', 'drink': 'coffee'}

相关问题 更多 >

    热门问题