這是相當直截了當以下文檔:
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
read = subparsers.add_parser('read')
read.add_argument('path')
write = subparsers.add_parser('write')
write.add_argument('path')
write.add_argument('value')
print(parser.parse_args(['read', 'foo']))
print(parser.parse_args(['write', 'foo', 'bar']))
請注意,這並不是告訴你解析器解析的參數。如果你想,你可以簡單地添加一個dest
到add_subparsers
命令:
subparsers = parser.add_subparsers(dest='subparser')
最後,您可以添加默認屬性的每個子分析器,你可以用它來執行特定於該子分析器的行動。這是在文檔列明過,但出於完整性,在我們的例子中,它可能是這個樣子:
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subparser')
def handle_read(args):
print('Handling read')
print(args)
read = subparsers.add_parser('read')
read.add_argument('path')
read.set_defaults(handler=handle_read)
def handle_write(args):
print('Handling write')
print(args)
write = subparsers.add_parser('write')
write.add_argument('path')
write.add_argument('value')
write.set_defaults(handler=handle_write)
args = parser.parse_args()
args.handler(args)
我加入了dest
到subparsers在這個例子中用於說明目的 - 使用帶處理函數的可能會使args
上的該屬性過時。