Python argparse - 创建没有标签的子命令
Python argparse - creating subcommands with no labels
我想创建一个命令解析器 mycommand
,使用 argparse
,带有两个子命令 read
和 write
:read
应该只有一个参数这是一些路径, write
应该有两个参数,其中一个是路径,另一个是值。应该可以通过以下方式执行命令:
mycommand read <path>
mycommand write <path> <value>
不为 <path>
、<value>
参数使用标签,即不需要 --path
。我该怎么做?
按照文档,这非常简单:
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')
最后,您可以为每个子解析器添加一个默认属性,您可以使用它来执行特定于该子解析器的操作。这在文档中也有详细说明,但为了完整起见,在我们的示例中,它可能看起来像这样1:
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)
1为了说明的目的,我也在这个例子中将 dest
添加到子解析器——可能使用 argparse
和处理函数使 args
上的该属性已过时。
我想创建一个命令解析器 mycommand
,使用 argparse
,带有两个子命令 read
和 write
:read
应该只有一个参数这是一些路径, write
应该有两个参数,其中一个是路径,另一个是值。应该可以通过以下方式执行命令:
mycommand read <path>
mycommand write <path> <value>
不为 <path>
、<value>
参数使用标签,即不需要 --path
。我该怎么做?
按照文档,这非常简单:
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')
最后,您可以为每个子解析器添加一个默认属性,您可以使用它来执行特定于该子解析器的操作。这在文档中也有详细说明,但为了完整起见,在我们的示例中,它可能看起来像这样1:
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)
1为了说明的目的,我也在这个例子中将 dest
添加到子解析器——可能使用 argparse
和处理函数使 args
上的该属性已过时。