这是我第一次使用 docopt,我正在为我试图实现的一个小型命令行程序的 args 解析而苦苦挣扎。
'''Usage:
ovh_mails.py list [--ugly]
ovh_mails.py add (<address> [--pswd=<password>][--description=<description>] | --file <filename>)
ovh_mails.py remove (<address> | --file <filename>)
ovh_mails.py (-h | --help)
Arguments:
<password> Password to access the mailbox (if not provided it's random generated)
<filename> Name of the files to process. Check README to see how to format it
Options:
-h, --help Show this help message
-u, --ugly Print without nice tables
-p, --pswd=<password> Set the password to the one provided
Commands:
list list all the email addresses currently configured
add add one or more (configured in <filename>) email addresses
remove remove one ore more (configured in <filename>) email addresses'''
我目前的论点解析是:
if __name__ == '__main__':
args = docopt(__doc__)
#Validate args ---- TODO
# 'List' command parsing
if args['list']:
if args['--ugly']:
eman = EmailManager(niceoutput=False)
else:
eman = EmailManager()
eman.list_emails()
# 'Add' command parsing
elif args['add']:
if args['<address>']:
eman = EmailManager()
emails = (
{
'address': args['<address>'],
'password': None,
'description': None,
},
)
if args['--description']:
emails[0]['description'] = args['<description>']
if args['--pswd']:
emails[0]['password'] = args['<password>']
if args['--file']:
raise NotImplemented
eman.add_emails(emails)
# 'remove' command parsing
elif args['remove']:
if args['<address>']:
eman = EmailManager()
emails = (
{
'address': args['<address>'],
},
)
eman.remove_emails(emails)
if args['--file']:
raise NotImplemented
有没有更好,更蟒蛇或更优雅的方式来做到这一点?