Python:如果未在命令行中传递,Argparse 将从 json 文件中获取默认值

问题描述 投票:0回答:1

我有一个带有命令行参数的脚本,需要修改。我想让 -x、-s 和 -e 成为强制性的,而 -m 应该是可选的。如果未传递 -m,则应从 JSON 文件获取值。每个 -x 值在 /opt/abc_m.json 下都会有一个同名的单独文件。请注意,-x 的每个输入都会在 /opt 下放置一个文件。无效的 -x 选项将退出代码。

abc_m.json内容如下

{
  "memory": "'12000",
  "container_vcpus": "2",
  "container_memory": "14336"
}

argparse代码如下

   parser.add_argument('-x', dest='shops', metavar='SHOP', type=str, nargs='+',
                            help='shop name (eg "abc_m") for which to process')
    parser.add_argument('-s', '--start', dest='start', required=False, metavar='START', type=str, default=None,
                        help='Starting  date as in integer in YYYYMMDD format')
    parser.add_argument('-e', '--end', dest='end', metavar='END', type=str, required=False, default=None,
                        help='Ending  date as in integer in YYYYMMDD format')
    parser.add_argument('-m', '--memory', dest='memory', metavar='MEMORY', type=int, required=False, default=None,
                        help='Memory allocation in MB')

我不确定是否可以解析 json 以获得 argparse 默认值

python command-line-arguments argparse
1个回答
0
投票

您可以稍后检查该值并在需要时读取它

parser.add_argument('-m', '--memory', dest='memory', metavar='MEMORY', type=int, required=False, default=None, help='Memory allocation in MB')
memory = parser.parse_args().memory

if memory is None:
    with open('abc_m.json') as js:
        memory = json.load(js)['memory']
© www.soinside.com 2019 - 2024. All rights reserved.