给出一个小的解析器:
from argparse import ArgumentError, ArgumentParser
p = ArgumentParser()
p.add_argument('x', choices=['1', '2'])
p.add_argument('--y', required=False)
p.parse_args('1 --y 2'.split()) # this would work
p.parse_args('1'.split()) # this would work also
但是,我想确保如果x=='1'
,那么--y
会得到一个值。我的实现是这样的:
args = p.parse_args('1 --y 2'.split())
if args.x=='1' and not args.y:
raise ArgumentError('blah')
是否存在内部argparse方法? argparse引发解析错误时,它看起来要好得多
更好的是,我希望--y
时需要x=='1'
arg,而在x=='2'
时不允许{em>
答案 0 :(得分:0)
x
=='1',那么--y
会得到一个值” 您可以使用此:
from argparse import ArgumentParser
from sys import argv
p = ArgumentParser(prog='MyParser')
yIsRequired = (argv[1] == '1') # True if x == '1' else False
p.add_argument('x') # Positional argument
p.add_argument(
'--y', # Optional argument
required=yIsRequired,
)
p = p.parse_args()
已全部测试。这段代码:
检查sys.argv
中是否有x
。
**如果x
== '1'
,则yIsRequired
设置为True
y
的{{1}}参数设置为required
的值您在这里:
yIsRequired
from argparse import ArgumentParser
import sys
p = ArgumentParser(prog='Demo')
yIsRequired = (sys.argv[1] == '1')
p.add_argument('x')
p.add_argument(
'--y',
required=yIsRequired,
)
if sys.argv[1] == '2' and '--y' in sys.argv: # If x == 2 and y has a value
sys.stderr.write('Demo: error: argument --y not allowed\n') # Write error to standard error output
sys.exit(1) # Exit with non-zero exit code
p = p.parse_args()
包含传递给脚本的所有参数(它是sys.argv
)list
检查是否已传递参数(布尔逻辑)