Lym*_*rga 5 python command-line-arguments argparse
我知道之前已经问过类似的问题,但我找不到一个确切的问题(另外,我无法理解'nargs'或'subparse'概念以及它如何适用于我的情况)
我想要的东西:
parser = argparse.ArgumentParser()
parser.add_argument('-mode', choices=['download', 'upload'], required=True)
parser.add_argument('-d', required=True)
args = parser.parse_args()
if args.mode == 'download':
parser.add_argument('-f', required=True)
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
所以-f
参数是必须的,只有当-mode
是download
否则它不应该被解析
一般来说,你应该避免提出--options
要求.在这种情况下,我会建议如下:
--mode
为子命令.-d
为位置参数-f
的第二个位置参数download
.如果你真的想,你可以保留-d
而-f
不是使它们成为位置参数.
你的电话会是这样的:
./script.py upload d-argument
./script.py download d-argument f-argument
Run Code Online (Sandbox Code Playgroud)
要么
./script.py upload -d foo
./script.py download -d foo -f bar
Run Code Online (Sandbox Code Playgroud)
实现的代码有点乏味,但相当简单.
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
upload_parser = subparsers.add_parser('upload')
download_parser = subparsers.add_parser('download')
upload_parser.set_defaults(cmd='upload')
download_parser.set_defaults(cmd='download')
for p in [ upload_parser, download_parser ]:
p.add_argument("d")
# p.add_argument("-d", required=True)
download_parser.add_argument("f")
# download_parser.add_argument("-f", required=True)
args = parser.parse_args()
if args.cmd == 'upload':
# handle upload with args.d
elif args.cmd == 'download':
# handle download with args.d and args.f
Run Code Online (Sandbox Code Playgroud)
请注意set_defaults
用于在最终解析的参数中标记的调用使用了哪个命令.
那这个呢?
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-mode', choices=['download', 'upload'], required=True)
parser.add_argument('-d', required=True)
parser.add_argument('-f')
args = parser.parse_args()
if args.mode == 'download' and not args.f:
parser.error('-f argument is required in "download" mode.')
Run Code Online (Sandbox Code Playgroud)
DEMO:
$ python test.py -mode=upload -d 10
$ python test.py -mode=download -d 10
usage: test.py [-h] -mode {download,upload} -d D [-f F]
test.py: error: -f argument is required in "download" mode.
$ python test.py -mode=download -d 10 -f 10
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2731 次 |
最近记录: |