Benutzerdefinierte Befehlszeilenanalyse in Python

7

Ich schreibe eine Shell für ein Projekt von mir, die im Prinzip Befehle analysiert, die so aussehen:

COMMAND_NAME ARG1="Langer Wert" ARG2 = 123 ARG3 = [email protected]

Mein Problem ist, dass Pythons Kommandozeilen-Bibliotheken (getopt und optparse) dazu zwingen, vor den Argumenten '-' oder '-' zu verwenden. Dieses Verhalten entspricht nicht meinen Anforderungen.

Irgendwelche Ideen wie kann das gelöst werden? Eine vorhandene Bibliothek dafür?

    
Moshe 01.10.2008, 09:35
quelle

7 Antworten

10

Sie können sie mit shlex.split () aufteilen, das die angegebenen Werte verarbeiten kann und dies ganz einfach mit einem sehr einfachen regulären Ausdruck parsen kann. Oder Sie können nur reguläre Ausdrücke zum Teilen und Parsen verwenden. Oder verwenden Sie einfach split ().

%Vor%     
ironfroggy 01.10.2008, 10:09
quelle
9
  1. Versuchen Sie, " Standards für Befehlszeilenschnittstellen "

  2. Konvertieren Sie Ihre Argumente (wie von Thomas vorgeschlagen) in das OptionParser-Format.

    %Vor%

Wenn Befehlszeilenargumente nicht in sys.argv oder einer ähnlichen Liste, sondern in einer Zeichenkette enthalten sind, verwenden Sie (wie Ironfrogy vorgeschlagen) shlex.split() .

%Vor%     
jfs 01.10.2008 10:57
quelle
2

Eine kleine pythonische Variante von Ironforgys Antwort auf die Frage:

%Vor%

oops ... - korrigiert.

Danke, J. F. Sebastian  (Ich muss mich an diese Ausdrücke für einen einzelnen Argumentgenerator erinnern.)

    
gimel 01.10.2008 10:48
quelle
1

Was ist mit optmatch ( Ссылка )? Dies ist kein Standard, sondern ein anderer Ansatz für das Parsen von Optionen. Es unterstützt jedes Präfix:

OptionMatcher.setMode (optionPrefix = '-')

    
Luic Pend 19.11.2009 00:30
quelle
0

Ohne ziemlich intensive Operation auf optparse oder getopt, ich glaube nicht, dass Sie sie vernünftig dazu bringen können, Ihr Format zu analysieren. Sie können jedoch leicht Ihr eigenes Format parsen oder es in etwas übersetzen, was opparse behandeln könnte:

%Vor%     
Thomas Wouters 01.10.2008 09:50
quelle
0

Wenig spät zur Party ... aber PEP 389 ermöglicht dies und vieles mehr.

Hier ist eine kleine nette Bibliothek, sollte Ihre Version von Python sie benötigen code.google.com/p/argparse

Viel Spaß.

    
James 16.04.2010 14:18
quelle
0

Sie könnten an einem kleinen Python-Modul interessiert sein, das ich geschrieben habe, um die Handhabung von Befehlszeilenargumenten noch einfacher zu machen (Open Source und frei zu benutzen) - Ссылка

    
Mufasa 06.02.2011 14:17
quelle