我已经在python中创建了pastebin终端客户端。它可能需要一些命令行参数,例如-o
打开文件,-n
设置粘贴名称等。它还具有选项-l
,其中列出了粘贴内容,并允许您删除或查看粘贴。问题是我不知道如何以一种不错的方式(使用argparse)来做-它不应允许将-l
与其他选项一起使用。
我添加了一个简单的逻辑:
if args.name:
if args.list:
print('The -l should be used alone. Check "pb -h" for help.')
sys.exit()
可以仅使用argparse来完成吗? 我知道互斥的组,我什至有一个(用于设置粘贴隐私),但我还没有想到。
答案 0 :(得分:1)
我认为您无法使用argparse
来实现您所说的“一种不错的方式”。
我在这里看到2个选项:
1)我得到的最简单的解决方案是在解析它们之后只检查您的参数。没什么好看的:
args = parser.parse_args()
if args.list is not None:
if not (args.name is None and args.open is None and
args.public is None and args.format is None and args.exp is None):
parser.error('Cannot use list with name, open, public, format or exp argument')
2)另一方面,您可以修改程序并使用
subparsers
喜欢:
subparsers = parser.add_subparsers(title="commands", dest="command")
parser_a = subparsers.add_parser('list', help='list help')
parser_b = subparsers.add_parser('action', help='Any action here')
parser_b.add_argument('-f', action="store", help='Choose paste format/syntax: text=None, '
'mysql=MYSQL, perl=Perl, python=Python etc...')
parser_b.add_argument('-n', '--name', action="store")
parser_b.add_argument('-o', '--open', action="store", help='Open file')
...
args = parser.parse_args()
if args.command == 'list':
...
elif args.command == 'action':
...
因此,例如,如果在后一种情况下将list -n='Name'
作为参数传递,则会出现错误:
用法:subparser_example.py [-h] {list,action} ...
subparser_example.py:错误:无法识别的参数:-n =“名称”
当然,您在这里还(作为开销)获得了一个额外的参数action
...