我已经开始使用,argparse
因为我必须为邮件脚本编写 Unix 风格的参数解析。
使用提供文件名邮件程序的“自动”选项,它将执行作为文件名接收的脚本,获取准备好的邮件并发送它。在第二种模式下--manual
,它应该能够从头开始构建任何邮件——一个文件作为内容,几个附件,几个提供邮件列表的选项。我真的很想在那里使用--long_opt
约定(也许-short_opt
也是),但如果我理解我应该使用子解析器。
是否可以将 subparser 命名为'--name'
或什至'-n'
?现在,我想不是 - 我有一个错误。
示例用例:
(1) python script.py --auto 'anotherScriptName.py'
(2) python script.py --manual --content 'htmlcontent.txt' --attach 'file1.jpg' 'file2.xlsx' --mail-All
(3) python script.py --manual --content 'htmlcontent.txt' --mail-to 'mail1@gmail.com' 'mail2@yahoo.com'
(4) python script.py --manual --content 'htmlcontent.txt' --attach 'file1.txt' --mail-g ALL_DEVELOPERS
广告。4) ALL_DEVELOPERS 可以是字符串或整数(数据库中组的键)
下面的代码:
parser = argparse.ArgumentParser(description='Standard UNIX-like option parser for customizing script')
subparsers = parser.add_subparsers()
p = subparsers.add_parser('--manual') ### HERE '--manual'
那太好了,但是我想在这里解析很多参数(并且所有参数都是必需的),并且在第二个选项中,我只需要一个路径来使用脚本来完成所有工作:
parser.add_argument('--manual', action='store_true', dest = 'mode', default = False)
我有的:
p.add_argument('--content', action = 'store', dest = 'content', require=True, help = "no help for you, it's just path to html content")
p.add_argument('--attach', action = 'store', dest = 'attachments', nargs='*', help = "attachments")
p.add_argument('--mail', '-m', choices=['-All', '-fromFile', '-group', '-to'], dest = 'mailOpt', require=True)
p.add_argument( dest = 'mails', nargs='*') # 0 args if -All selected, raise error in other case
p2 = subparsers.add_parser('--auto') # Like '--manual'
p2.add_argument('--filename', action='store')
如果不可能,我应该使用 _parse_known_args_ 函数还是这是个坏主意,只留下名称“手动”和“自动”,因为它们看起来足够清晰?