gpt4 book ai didi

python - argparse 中的条件可选标志

转载 作者:太空宇宙 更新时间:2023-11-04 01:21:29 24 4
gpt4 key购买 nike

我正在编写一个程序,它将 url 列表作为参数。或者,我还希望能够包含一个包含附加 url 列表的文件。因此,程序帮助看起来像是以下内容的组合:

usage: [-h] url [url ...]

usage: [-h] --input-file file [ url [url ...]]

我目前正在将其编程为:

usage: [-h] [--input-file file] [url [url ...]]

其中 --input-file 的使用和指定至少一个 url 都是可选的。然后我检查自己是否指定了 input-file 或 url 列表。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-i','--input-file', help="File of urls to be read")
parser.add_argument('urls',nargs='*')
args = parser.parse_args()
if not args.input_list and not args.urls:
parser.error('must have either an input-file or a url')

在 argparse 中有没有一种方法可以强制用户在没有给出输入文件的情况下指定一个 url,但如果是,则将其设为可选?

最佳答案

如果您指定一个 fromfile-prefix-chars(例如 @),用户可以指定一个文件来读取这些 url。该文件的行被读取并添加到 sys.argv 中,就好像它们是在命令行中输入的一样。

http://docs.python.org/dev/library/argparse.html#fromfile-prefix-chars

parser = argparse.ArgumentParser(fromfile_prefix_chars='@')
parser.add_argument('urls',nargs='+') # require 1 or more url
args = parser.parse_args()

这些都有效(其中 urls.txt 每行有一个 url 字符串)

parser.parse_args('four.txt'.split())
parser.parse_args('@urls.txt four.txt'.split())
parser.parse_args('@urls.txt'.split())

虽然没有文件或 url 给出错误

parser.parse_args(''.split())

默认的 help 没有说明允许使用 @url.txt 文件名,但您可以将其添加到自定义描述字符串中。

PS - 你的 post-argparse 测试比你在 argparse 中指定的任何东西都简单。涉及 -i 参数和位置的必需的互斥组可能会起作用,但它所做的并不比您的测试更多。我写“可能”是因为我必须加倍判断“*”位置是否在这样的组中起作用。但这是我见过的首批 fromfile_prefix_chars 选项真正有用的案例之一。

关于python - argparse 中的条件可选标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20891068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com