Sie konnten die split_arg_string
Helferfunktion vom click
Paket verwenden:
import re
def split_arg_string(string):
"""Given an argument string this attempts to split it into small parts."""
rv = []
for match in re.finditer(r"('([^'\\]*(?:\\.[^'\\]*)*)'"
r'|"([^"\\]*(?:\\.[^"\\]*)*)"'
r'|\S+)\s*', string, re.S):
arg = match.group().strip()
if arg[:1] == arg[-1:] and arg[:1] in '"\'':
arg = arg[1:-1].encode('ascii', 'backslashreplace') \
.decode('unicode-escape')
try:
arg = type(string)(arg)
except UnicodeError:
pass
rv.append(arg)
return rv
Zum Beispiel:
>>> print split_arg_string('"this is a test" 1 2 "1 \\" 2"')
['this is a test', '1', '2', '1 " 2']
Das click
Paket beginnt für Kommando Argumente zu dominieren Parsen, aber ich don‘ Ich denke, es unterstützt Parsen von Argumenten aus String (nur von argv
). Die obige Hilfsfunktion wird nur für die bash
Vervollständigung verwendet.
Bearbeiten: Ich kann nur empfehlen, die shlex.split()
zu verwenden, wie in der Antwort von @ShadowRanger vorgeschlagen. Der einzige Grund, warum ich diese Antwort nicht lösche, ist, dass sie ein bisschen schneller spaltet dann der vollwertige pure-python Tokenizer in shlex
(etwa 3.5x schneller für das obige Beispiel, 5.9us vs 20.5us) verwendet. Dies sollte jedoch kein Grund sein, es über shlex
zu bevorzugen.
was sollte die Ausgabe genau von 'argparse.ArgumentParser.parse_args' sein –
Sie müssen uns ein vollständiges Programm zeigen, das das spezifische Problem zeigt, das Sie haben, mit Beispieleingabe, die es auslöst. –