also an einer Aufgabe arbeite ich in einer Python-Klasse, die ich nehme, habe aber mit etwas stecken geblieben wir nicht wirklich keine weiteren Informationen über (weder auf SO, Google finden können oder in der Kursunterlagen).Getopt mehr Argumente Syntaxen
Ich brauche Hilfe mit, wie Argumente mit mehreren Arten von Syntaxen zu handhaben - wie [arg] und < arg>, das ist etwas, das ich nicht in der Lage gewesen bin über weitere Informationen zu finden. Hier
ist ein Beispiel Use-Case, das funktionieren soll.
>>> ./marvin-cli.py --output=<filename.txt> ping <http://google.com>
>>> Syntax error near unexpected token 'newline'
Der Code unten arbeitet für jeden Anwendungsfall in Ordnung, wenn ich keine weiteren Ausgang definiert haben als auf der Konsole zu schreiben:
# Switch through all options
try:
opts, args = getopt.getopt(sys.argv[1:], "hsv", ["help","version","silent", "get=", "ping=", "verbose", "input=", "json"])
for opt, arg in opts:
if opt in ("-h", "--help"):
printUsage(EXIT_SUCCESS)
elif opt in ("-s", "--silent"):
VERBOSE = False
elif opt in ("--verbose"):
VERBOSE = True
elif opt in ("--ping"):
ping(arg)
elif opt in ("--input"):
print("Printing to: ", arg)
else:
assert False, "Unhandled option"
except Exception as err:
print("Error " ,err)
print(MSG_USAGE)
# Prints the callstack, good for debugging, comment out for production
#traceback.print_exception(Exception, err, None)
sys.exit(EXIT_USAGE)
#print(sys.argv[1])
Beispiel Nutzung:
>>> ./marvin-cli.py ping http://google.com
>>> Latency 100ms
Und Dies ist ein Ausschnitt, der zeigt, wie der Ping funktioniert:
def ping(URL):
#Getting necessary imports
import requests
import time
#Setting up variables
start = time.time()
req = requests.head(URL)
end = time.time()
#printing result
if VERBOSE == False:
print("I'm pinging: ", URL)
print("Received HTTP response (status code): ", req.status_code)
print("Latency: {}ms".format(round((end - start) * 1000, 2)))
was ist Ihre Frage genau? Möchtest du '--output' zu deinem getopt parsing hinzufügen? –
Ich dachte, die Frage sei offensichtlich ... Ich muss mit mehreren Argumentsyntaxen umgehen, wobei das Argument (s) entweder in [/] oder <> – geostocker
sein sollte. Sind Sie verpflichtet, 'getopt' zu verwenden? Denn 'argparse' ist viel mächtiger und bietet eine großartige Syntax für diese Fälle, ohne dass Sie alles selbst parsen müssen. – poke