python argparse-如何允许解析器在标志和非标志参数上工作

时间:2019-12-21 13:46:21

标签: python argparse

我如何设置我的argparser使其具有以下行为?

backup -c example
backup example
backup -r example
backup -l

backup --create example2
backup example2
backup --remove example2
backup --list

我想让我的程序具有各种标志来创建/列出/删除此处未概述的“进程”。我希望可以使用--create标志创建进程,然后可以使用提供的名称来调用该标志。可以通过将名称传递给--delete标志来删除该过程。我希望能够传递non-flag参数(要运行的进程的名称),而不与可能为store_true或可能不是store_true的其他标志冲突(在要列出操作的情况下)或参数(例如创建/删除)

如果我使用位置参数来捕获备份过程的名称,那么我将失去以预期方式传递标志的能力,因此需要位置参数。但是,没有一个参数,我无法传递未指定的参数(没有标志的参数)。

在此示例中,您可以想象-c创建具有给定名称的人工制品,直接调用该名称会触发一些计算,而-r会删除具有给定名称的人工制品。

1 个答案:

答案 0 :(得分:2)

根据我的理解,您想在程序中将参数用作flags

# Creating flag based argument
# Set to true if "--c" is mentioned
parser.add_argument('--c', action='store_true', help='create')

# Parsing
opt = parser.parse_args()

# Using argument
if opt.c:
    create()