我有一个带有命令行参数的脚本,需要修改。我想让 -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 默认值
您可以稍后检查该值并在需要时读取它
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']