2017-11-03 4 views
0

Ich habe unten Python-Programm übernimmt Argument von der Befehlszeile.Python übergeben Kommandozeile Argument mit-in-Programm

import argparse 
import sys 

choice=['orange','apple', 'grapes', 'banna'] 

def select(): 
    parser = argparse.ArgumentParser(prog='one', description='name test') 
    parser.add_argument(
     'fname', 
     action="store", 
     type=str, 
     choices=choice, 
     help="furits name") 

    args = parser.parse_args(sys.argv[1:2]) 

    print 'selected name {0}\n'.format(args.fname) 

if __name__ == '__main__': 
    select() 

das funktioniert

python s.py apple 
selected name apple 

Wie Argument mit in Hauptfunktion Inline können. Ich habe das versucht, aber es funktioniert nicht.

Hauptleitung ändern dies.

if __name__ == '__main__': 
    sys.argv[0]='apple' 
    select() 

Fehler unter erhalten.

usage: one [-h] {orange,apple,grapes,banna} 
one: error: too few arguments 

Wie kann ich dies in Argument erreichen?

dank -SR

+0

Die Standardaktion für 'parse_args' ist' sys.argv [1:] '. 'sys.argv [0]' wird als Standardattribut für "prog" verwendet. – hpaulj

Antwort

1

Ihr Index ist falsch sys.argv[0] der Pfad des Python-Skript sein wird. Was Sie wollen, ist:

Aber das ist eine seltsame Art, Dinge zu tun. Nach etwas mehr Gedanken, dies fiel mir ein:

choice=['orange','apple', 'grapes', 'banna'] 

def select(): 
    parser = argparse.ArgumentParser(prog='one', description='name test') 
    parser.add_argument(
     'fname', 
     nargs='?', 
     default='apple', 
     action="store", 
     type=str, 
     choices=choice, 
     help="furits name") 

    args = parser.parse_args(sys.argv[1:2]) 

    print 'selected name {0}\n'.format(args.fname) 

if __name__ == '__main__': 
    select() 

Hinweis die nargs='?' und default='apple' Ergänzungen der call() add_argument. Diese machen den Parameter optional und setzen den Standardwert auf "Apfel", wenn kein Argument angegeben wird.

+0

@ BogdanMarginean Sie sind richtig, meine Tests waren schlecht, korrigiert. –

+0

Thaks funktionierte wie erwartet. – sfgroups

+0

@sfgroups Kein Problem –

Verwandte Themen