对于其中的所有功能和选项,
argparse我认为您永远不会获得看起来像您想要的“罐头”用法字符串。
也就是说,自您的原始帖子起,您是否查看过子解析器?
这是一个准系统的实现:
import argparseparser = argparse.ArgumentParser(prog='mydaemon')sp = parser.add_subparsers()sp_start = sp.add_parser('start', help='Starts %(prog)s daemon')sp_stop = sp.add_parser('stop', help='Stops %(prog)s daemon')sp_restart = sp.add_parser('restart', help='Restarts %(prog)s daemon')parser.parse_args()使用
-h选项运行此命令将产生:
usage: mydaemon [-h] {start,stop,restart} ...positional arguments: {start,stop,restart} start Starts mydaemon daemon stop Stops mydaemon daemon restart Restarts mydaemon daemon这种方法的好处之一是能够
set_defaults用于每个子解析器,以将函数直接连接到参数。我还为
stop和添加了“优美”选项
restart:
import argparsedef my_stop(args): if args.gracefully: print "Let's try to stop..." else: print 'Stop, now!'parser = argparse.ArgumentParser(prog='mydaemon')graceful = argparse.ArgumentParser(add_help=False)graceful.add_argument('-g', '--gracefully', action='store_true', help='tries to terminate the process gracefully')sp = parser.add_subparsers()sp_start = sp.add_parser('start', help='Starts %(prog)s daemon')sp_stop = sp.add_parser('stop', parents=[graceful], description='Stops the daemon if it is currently running.', help='Stops %(prog)s daemon')sp_restart = sp.add_parser('restart', parents=[graceful], help='Restarts %(prog)s daemon')# Hook subparsers up to functionssp_stop.set_defaults(func=my_stop)# Uncomment when my_start() and # my_restart() are implemented## sp_start.set_defaults(func=my_start)# sp_restart.set_defaults(func=my_restart)args = parser.parse_args()args.func(args)显示以下内容的“帮助”消息
stop:
$ python mydaemon.py stop -husage: mydaemon stop [-h] [-g]Stops the daemon if it is currently running.optional arguments: -h, --help show this help message and exit -g, --gracefully tries to terminate the process gracefully
停止“优雅地”:
$ python mydaemon.py stop -gLet's try to stop...



