2016-11-18 4 views
3

Gibt es eine Möglichkeit, -- als Wert an ein Python-Programm mit Argparse übergeben, ohne das Gleichheitszeichen (=) zu verwenden?Python argparse mit - als Wert

die Befehlszeilenargumente, die ich den argparser hinzugefügt werden, wie unten definiert:

python myprogram.py --myarg value123 

Gibt es eine Möglichkeit zu laufen:

parser.add_argument('--myarg', help="my arg description") 

Sie dieses Argument in einem Programm wie diese verwenden würde Dieses Programm mit - als Wert anstelle von 'Wert123'?

d.h

python myprogram.py --myarg -- 
+0

Wenn die Aktion "store_true" ist, wird die Option * kein * Argument verwendet. – chepner

+0

Selbst mit dem Gleichheitszeichen wird '--myarg = -' genauso behandelt wie '--myarg -'. – chepner

+0

Es erzeugt 'Namespace (myarg = [])'. Es verwirrt den Parser. Bleiben Sie bei der Verwendung von '--' als Trennzeichen und versuchen Sie nicht, argparse oder Ihre Benutzer zu verwechseln. Warum müssen Sie diese Zeichenfolge als Argument behandeln? – hpaulj

Antwort

3

Ich vermute, dass es nicht möglich sein wird, argparse tun dies nativ zu machen. Sie könnten jedoch sys.argv als eine nicht-intrusive Workaround vorverarbeiten.

import sys 
from argparse import ArgumentParser 
from uuid import uuid4 

sentinel = uuid4().hex 

def preprocess(argv): 
    return [sentinel if arg == '--' else arg for arg in argv[1:]] 

def postprocess(arg): 
    return '--' if arg == sentinel else arg 

parser = ArgumentParser() 
parser.add_argument('--myarg', help="my arg description", type=postprocess) 
args = parser.parse_args(preprocess(sys.argv)) 
+0

Ich bekomme 'Namespace (myarg = [])' aus Ihrem Code - mit oder ohne das =. – hpaulj

+0

Das ist irgendwie der Punkt. Es gibt keine Möglichkeit, 'myarg = []' zu erhalten, außer durch Eingabe von '--'. Von der Python-Seite können Sie mit dem 'myarg' machen, was Sie jetzt wollen ... – wim

+0

' myarg = [] 'ist das, was ich für eine 'nargs =' * '' Aktion erwarten würde, nicht die Standard-NARGS. – hpaulj