Ihre Idee macht keinen Sinn von der Benutzer Seite der Dinge.
Bedeutung: Wenn Sie sagen, -f
muss der Benutzer bereits verstehen, dass das Tool die entsprechende Datei öffnen und Prozess es wird. Daher sollten Sie ihn nicht bitten, -a
zusätzlich zur Verfügung zu stellen.
Aber natürlich können Sie es tun. Was ich hier tun würde: einen Standard Wert für den -a
Schalter zur Verfügung stellen, wie beschrieben here zum Beispiel.
Dann kann Ihr Skript prüfen, ob Standard Wert verwendet wird. Und dann können Sie Entscheidungen auf dieser Grundlage machen, wie in:
- wenn
-a
hat seinen Wert Ausfall- und -f
gegeben: aus der Datei lesen und tun, was -a
damit machen sollte
- wenn
-a
haben nicht den Standard Wert und -f
ist gegeben: ??? (Sie haben zu denken, was das bedeutet)
- ...
Diejenigen, ... sind ein Symptom, warum ich Ihren Ansatz berücksichtigen nicht elegant sein: es kompliziert wirklich das ganze Argument Handling massiv. Ich würde einfach gehen für oder-f file
und nicht erlauben für diejenigen, die gemischt werden. Sie sehen, jede Schnittstelle sollte es einfach machen, um das Richtige zu tun, und hart, um die falsche Sache zu tun. Das Zulassen von Kombinationen von Flags/Switches führt einfach zu einer Explosion von möglichen Pfaden. Und das bedeutet, dass Sie sich mit allen befassen müssen, und der Benutzer muss sich an diejenigen erinnern, die tatsächlich gültig sind.
Und Ihren Kommentar gegeben: Natürlich könnten Sie dies vereinheitlichen, um nehmen entweder eine Zahl oder eine Zeichenfolge, die einen Dateinamen.
Dann weisen Sie einfach Argarse, dass speichert Zeichenfolge Werte. Dann kann Ihr Skript entscheiden, ob diese Zeichenfolge eine Nummer oder einen gültigen Dateinamen ist. Um dann zu tun, was notwendig ist. Etwas wie dieses:
from __future__ import print_function
import os.path
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-a", "--add",
help="whatever",
type=str)
args = parser.parse_args()
if args.add:
if args.add.isdigit():
print("input contains only digits: {}".format(args.add))
else:
print("input contains other stuff: {}".format(args.add))
if os.path.isfile(args.add):
print("input is a valid file name!")
Warum brauchen Sie das -a für den 2. Fall? -f sollte ausreichen. – sureshvv
weil das Skript auch etwas anderes tut, also möchte ich mit -a diese Funktionalität unterscheiden. Aber ich will zwei verschiedene Eingabemöglichkeiten dafür –
Du kannst nargs = setzen? beim Aufruf von add_argument für -a – sureshvv