Ich habe Probleme bei der Verwendung des dest-Parameters von add_argument mit Positionsargumenten. Der Grund, warum ich dies möchte, ist, dass ich nargs='*' verwende und es für mich sinnvoll ist, den Argumentnamen im Singular zu haben, damit seine Hilfe als [Ziel ...] ausgegeben wird, das Ziel jedoch im Plural, um seinem Listentyp zu entsprechen:
Code: Select all
# Public function for use from other scripts
def run(targets: list[str]):
pass
if __name__ == '__main__':
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument('target', dest='targets', nargs='*', default=['.'])
run(**vars(parser.parse_args()))
löst Fehler aus:
Code: Select all
parser.add_argument('target', dest='targets', nargs='*', default=['.'])
File "/usr/lib/python3.13/argparse.py", line 1452, in add_argument
raise ValueError('dest supplied twice for positional argument')
ValueError: dest supplied twice for positional argument
Ich weiß, dass ich es „beheben“ könnte, indem ich vars nicht direkt verwende oder das resultierende Diktat ändere, bevor ich es zur Ausführung übergebe, aber ich würde es lieber direkt in der API von argparse tun, da die vars sicherstellen, dass die CLI dieselbe API hat wie das als Bibliothek importierte Skript.