Verzeichnispfadtypen mit argparse

Mein Python-Skript muss Dateien aus einem Verzeichnis lesen, das über die Befehlszeile übergeben wird. Ich habe einen readable_dir-Typ wie folgt definiert, der mit argparse verwendet wird, um zu überprüfen, ob das in der Befehlszeile übergebene Verzeichnis vorhanden und lesbar ist. Zusätzlich wurde ein Standardwert (/ tmp / non_existent_dir im folgenden Beispiel) für das Verzeichnisargument angegeben. Das Problem hierbei ist, dass argparse readable_dir () für den Standardwert aufruft, selbst wenn ein Verzeichnisargument explizit in der Befehlszeile übergeben wird. Dadurch wird das Skript ausgeblendet, da der Standardpfad / tmp / non_existent_dir in einem Kontext nicht vorhanden ist, in dem ein Verzeichnis explizit in der Befehlszeile übergeben wird. Ich könnte dies umgehen, indem ich keinen Standardwert spezifiziere und dieses Argument obligatorisch mache oder indem ich die Validierung auf einen späteren Zeitpunkt im Skript verschiebe, aber ist das eine elegantere Lösung, die jedem bekannt ist?

#!/usr/bin/python
import argparse
import os

def readable_dir(prospective_dir):
  if not os.path.isdir(prospective_dir):
    raise Exception("readable_dir:{0} is not a valid path".format(prospective_dir))
  if os.access(prospective_dir, os.R_OK):
    return prospective_dir
  else:
    raise Exception("readable_dir:{0} is not a readable dir".format(prospective_dir))

parser = argparse.ArgumentParser(description='test', fromfile_prefix_chars="@")
parser.add_argument('-l', '--launch_directory', type=readable_dir, default='/tmp/non_existent_dir')
args = parser.parse_args()

Antworten auf die Frage(3)

Ihre Antwort auf die Frage