使用git commit
可以使用git status
轻松解析argparse
和add_subparsers
等子命令。如何为从命令行中选择的选项获得嵌套设置输入?
假设我想播放所有自定义设置的音乐:
play.py --path /path/to.file --duration 100 --filter equalizer --effect echo equalizer_settings 1 2 echo_settings 5
此处--filter equalizer
和--effect echo
是第一级选择,但我需要获取这些作为辅助参数的设置。例如:echo_settings 5
和equalizer_settings 1 2
。
辅助设置可能不止一个,最好使用命名参数。
下面列出的是我到目前为止......
import argparse
parser = argparse.ArgumentParser(description='Play music the way I want it.')
parser.add_argument('-p', '--path', type=str, required=True, help='File path')
parser.add_argument('-d', '--duration', type=int, default=50, help='Play duration')
parser.add_argument('-f', '--filter', choices=['none', 'equalizer'], default='none', help='Filter selection')
parser.add_argument('-e', '--effect', choices=['none', 'echo', 'surround'], default='none', help='Effect selection')
subparsers = parser.add_subparsers(help='Settings of optional parameters')
equalizer_parser = subparsers.add_parser("equalizer_settings")
equalizer_parser.add_argument('equalizer_min_range', type=int)
equalizer_parser.add_argument('equalizer_max_range', type=int)
echo_parser = subparsers.add_parser("echo_settings")
echo_parser.add_argument('echo_strength', type=int)
surround_parser = subparsers.add_parser("surround_settings")
surround_parser.add_argument('surround_strength', type=int)
args = parser.parse_args()
print(args)
目前error: unrecognized arguments
答案 0 :(得分:0)
您一次只能使用一个subparser,即3 settings
中的一个。有一些先进的方法可以按顺序使用几个子分析器,但我认为我们不想去那里(参见之前的SO argparse
问题)。
但你真的需要使用subparsers吗?为什么不只是另一组选项(标记)参数,如:
parser.add_argument("--equalizer_settings", nargs=2, type=int)
parser.add_argument("--echo_settings", type=int)
parser.add_argument("--surround_strength", type=int
您只是添加一些参数,而不是调用某种动作命令。