解析多个位置参数的问题
Posted
技术标签:
【中文标题】解析多个位置参数的问题【英文标题】:Issue parsing multiple positional arguments 【发布时间】:2021-02-18 01:06:37 【问题描述】:我一定遗漏了一些非常明显的东西,但我终生无法发现它。
import argparse
def parse_args():
parser = argparse.ArgumentParser(description="Copies selected files.")
parser.add_argument(
"-c", "--checksum", type=bool, default=False
)
parser.add_argument("source")
parser.add_argument("target")
return parser.parse_args()
def main():
args = parse_args()
print(args.checksum, args.source, args.target)
main()
>python file_proc.py source1 target1
False source1 target1
到目前为止,一切都很好。
>python file_proc.py -c source1 target1
usage: file_proc.py [-h] [-c CHECKSUM] source target
file_proc.py: error: the following arguments are required: target
现在,为什么不输出True source1 target1
?它一定就在我面前,但我需要另一双眼睛。
谢谢!
【问题讨论】:
type
参数应该是一个函数,它将输入字符串转换为所需的值。如果您想将诸如“yes”或“no”之类的字符串解释为True/False
booleans,则必须自己编写。
【参考方案1】:
您的编码方式基本上意味着,如果您传递 -c
,那么您还需要在 args 中传递 bool
。
因此你的陈述:
>python file_proc.py source1 target1
False source1 target1
工作正常,因为您没有通过-c
。所以,它打印了False
。
但是当你在命令行中传递-c
时,它需要另一个变量作为参数传递。这样做:
>python file_proc.py -c d source1 target1
True source1 target1
这意味着 bool
作为参数传递,因此它打印 True
。
【讨论】:
【参考方案2】:--checksum
的参数声明意味着在-c
/--checksum
之后传入一个实际的布尔值。例如,--checksum yes
将“启用”校验和;由于bool
解释字符串的方式,任何 参数而不是空字符串的计算结果为True
。
使用store_true
/store_false
action 定义一个无参数标志,通过被提及来打开/关闭。
parser.add_argument(
"-c", "--checksum", action='store_true'
)
【讨论】:
我知道这是基本的东西!它是一个开关参数,所以我确实需要action='store_true'
。谢谢!以上是关于解析多个位置参数的问题的主要内容,如果未能解决你的问题,请参考以下文章
AWS CDK - 多个堆栈 - 找不到 Lambda 代码位置的参数