argparse 必需参数列表与可选参数列表竞争
argparse required argument list competes with optional argument list
我有一个带有 argparse 的 Python 程序。必需的参数是文件名列表,可选的是要从所有文件中删除的字符串列表。
import argparse
parser = argparse.ArgumentParser("File formatter")
parser.add_argument("filename", type=str, nargs="+")
parser.add_argument("-r", "--remove", metavar="STRING", nargs="+")
args = parser.parse_args()
print(args.filename)
print(args.remove)
以上给出
usage: filefmt [-h] [-r STRING [STRING ...]] filename [filename ...]
问题:在像
这样的通话中
filefmt -r str1x gg24 a.txt b.dat
程序无法知道哪个参数是删除 STRING
,哪个是 filename
。我必须这样称呼它
filefmt a.txt b.dat -r str1x gg24
但有时,环境要求我将文件名放在最后。
知道如何解决这个问题吗?我想避免在文件名前加上选项字符串,这是默认用法:
filefmt a.txt b.txt
要解决歧义,您必须要求为每个 STRING 使用 -r 选项
例如:
import argparse
parser = argparse.ArgumentParser("File formatter")
parser.add_argument("filename", type=str, nargs="+")
parser.add_argument("-r", "--remove", metavar="STRING", default=[], action='append', help='string to remove (repeat this option for each string)')
args = parser.parse_args()
print(args.filename)
print(args.remove)
运行 像这样:
args1.py -r a -r b qwe asd zcx
输出:
['qwe', 'asd', 'zcx']
['a', 'b']
用法没有显示你可以重复 -r 所以我在 -r 的帮助中添加了它:
usage: File formatter [-h] [-r STRING] filename [filename ...]
positional arguments:
filename
optional arguments:
-h, --help show this help message and exit
-r STRING, --remove STRING
string to remove (repeat this option for each string)
我有一个带有 argparse 的 Python 程序。必需的参数是文件名列表,可选的是要从所有文件中删除的字符串列表。
import argparse
parser = argparse.ArgumentParser("File formatter")
parser.add_argument("filename", type=str, nargs="+")
parser.add_argument("-r", "--remove", metavar="STRING", nargs="+")
args = parser.parse_args()
print(args.filename)
print(args.remove)
以上给出
usage: filefmt [-h] [-r STRING [STRING ...]] filename [filename ...]
问题:在像
这样的通话中filefmt -r str1x gg24 a.txt b.dat
程序无法知道哪个参数是删除 STRING
,哪个是 filename
。我必须这样称呼它
filefmt a.txt b.dat -r str1x gg24
但有时,环境要求我将文件名放在最后。
知道如何解决这个问题吗?我想避免在文件名前加上选项字符串,这是默认用法:
filefmt a.txt b.txt
要解决歧义,您必须要求为每个 STRING 使用 -r 选项
例如:
import argparse
parser = argparse.ArgumentParser("File formatter")
parser.add_argument("filename", type=str, nargs="+")
parser.add_argument("-r", "--remove", metavar="STRING", default=[], action='append', help='string to remove (repeat this option for each string)')
args = parser.parse_args()
print(args.filename)
print(args.remove)
运行 像这样:
args1.py -r a -r b qwe asd zcx
输出:
['qwe', 'asd', 'zcx']
['a', 'b']
用法没有显示你可以重复 -r 所以我在 -r 的帮助中添加了它:
usage: File formatter [-h] [-r STRING] filename [filename ...]
positional arguments:
filename
optional arguments:
-h, --help show this help message and exit
-r STRING, --remove STRING
string to remove (repeat this option for each string)