2024-09-30 00:35:49 发布
网友
我想允许任意的命令行参数。如果用户提供的命令行如下所示
myscript.py --a valueofa --b valueofb posarg1 posarg2
我知道a与valueofa一起传递,b与{}一起传递,我有最后两个位置参数。在
a
valueofa
b
我一直使用optparse,您可以指定要查找的参数。但是我希望用户能够从命令行定义任意的“宏”。当然有一个python模块比我写的任何东西都要优雅。是什么?在
argparse会做你想做的吗?它最近被添加到标准库中。具体来说,您可能需要查看文档的this section。在
{很遗憾,你}。如果您必须支持此功能,则需要编写自己的选项parser=(。在
arbitrary_args.py:
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:
$./arbitrary_args.py cmd posarg1 posarg2 foo bar baz posarg3 quux
(['cmd', 'posarg1', 'posarg2', 'posarg3'], {'foo': True, 'bar': 'baz', 'quux': True})
argparse_arbitrary.py:
argparse_arbitrary.py
$./argparse_arbitrary.py -Ddrink=coffee -Dsnack=peanut
{'snack': 'peanut', 'drink': 'coffee'}
argparse会做你想做的吗?它最近被添加到标准库中。具体来说,您可能需要查看文档的this section。在
{很遗憾,你}。如果您必须支持此功能,则需要编写自己的选项parser=(。在
arbitrary_args.py
:$./arbitrary_args.py cmd posarg1 posarg2 foo bar baz posarg3 quux
:
^{pr2}$argparse_arbitrary.py
:$./argparse_arbitrary.py -Ddrink=coffee -Dsnack=peanut
相关问题 更多 >
编程相关推荐