2016-04-21 15 views
3

Ich möchte außer Kraft gesetzt nächste Verhalten achive:prüfen argparse Argument Satz oder verwendet standardmäßig oder

python script.py 
> my_arg is None 

python script.py --my-arg 
> my_arg is "default" 

python script.py --my-arg some_value 
> my_arg is "some_value" 

Wie für Argparser dieses Argument konfigurieren?

Was ich bisher versucht:

#!/usr/bin/env python 
import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('--my-argument', nargs='?', default='default') 
args = parser.parse_args() 

print(args.my_argument) 

Aber für test.py habe ich default

Antwort

1

Wie wäre es damit bekam? Mit append Aktion nicht spezifizierten Fall unterscheiden/--my-arg angegebenen Fall:

>>> import argparse 
>>> 
>>> parser = argparse.ArgumentParser() 
>>> parser.add_argument('--my-arg', action='append', nargs='?', default=[]) 
>>> def parse(argv): 
...  args = parser.parse_args(argv) 
...  if not args.my_arg: 
...   return None 
...  return args.my_arg[0] or 'default' 
... 
>>> parse([]) # python script.py 
>>> parse(['--my-arg']) # python script.py --my-arg 
'default' 
>>> parse(['--my-arg', 'some_value']) # python script.py --my-arg some_value 
'some_value' 
+0

Sehr interessante Lösung für komplexere Fälle, und es funktioniert, aber ich habe die einfachste Lösung für meinen eher einfachen Fall gefunden. – dkiselev

3

gefunden Lösung hier Python argparse: default value or specified value

Mein Skript wie folgt aussieht:

#!/usr/bin/env python 
import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('--my-argument', nargs='?', const='default') 
args = parser.parse_args() 

print(args.my_argument) 
+0

Ja, 'nargs =?' gibt Ihnen diese 3-Wege-Aktion mit 'default' und 'const'. – hpaulj

Verwandte Themen