2012-07-22 10 views
6

Muszę wprowadzić parametry z wiersza poleceń, np. Nazwa użytkownika, hasło i nazwa bazy danych. Wiem, jak to zrobić bez użycia flag, używając "sys.argv" (jak poniżej).Dodaj argumenty wiersza poleceń z flagami w Python3

##Test.py 
hostname = str(sys.argv[1]) 
username = str(sys.argv[2]) 
password = str(sys.argv[3]) 

def ConnecttoDB(): 
    try: 
     con=sql.connect(host=hostname, user= username, passwd= password) 
     print ('\nConnected to Database\n') 

# If we cannot connect to the database, send an error to the user and exit the program. 
    except sql.Error: 
     print ("Error %d: %s" % (sql.Error.args[0],sql.Error.args[1])) 
     sys.exit(1) 

    return con 

Tak, to może być prowadzony jako:

$ test.py Nazwa użytkownika bazy danych pasword

Ale problemem jest to, że muszę używać 'flagi'. Tak więc skrypt może być uruchamiany w ten sposób:

$test.py -db DATABSE -u USERNAME -p PASSWORD -size 20 

Jak używać flag do pobierania argumentów z wiersza poleceń? Byłbym wdzięczny za twoją pomoc w tej sprawie.

Odpowiedz

6

Przede wszystkim dzięki Mark dla 'argparse' kodu. Zorientowałem się, jak wziąć argumenty z linii poleceń określonej przez flagi. Ja wklejając poniższy kod, który wykorzystuje zmodyfikowany kod „Mark” i mały moduł, który pokazuje, jak używać argumentów zebranych poprzez polecenie:

import argparse 

parser = argparse.ArgumentParser() 

#-db DATABASE -u USERNAME -p PASSWORD -size 20000 
parser.add_argument("-host", "--hostname", dest = "hostname", default = "xyz.edu", help="Server name") 
parser.add_argument("-db", "--database", dest = "db", default = "ding_dong", help="Database name") 
parser.add_argument("-u", "--username",dest ="username", help="User name") 
parser.add_argument("-p", "--password",dest = "password", help="Password") 
parser.add_argument("-size", "--binsize",dest = "binsize", help="Size", type=int) 

args = parser.parse_args() 

print("Hostname {} db {} User {} Password {} size {} ".format(
     args.hostname, 
     args.db, 
     args.username, 
     args.password, 
     args.binsize 
     )) 
def ConnectToDB(): 
    print ('Trying to connect to mySQL server') 
    # Try to connect to the database 
    try: 
     con=sql.connect(host=args.hostname, user= args.username, passwd= args.password) 
     print ('\nConnected to Database\n') 

    # If we cannot connect to the database, send an error to the user and exit the program. 
    except sql.Error: 
     print ("Error %d: %s" % (sql.Error.args[0],sql.Error.args[1])) 
     sys.exit(1) 

    return con 

Jeden z moim zmartwieniem było, jak używać zmiennych z argumentów do kodu . W tym celu należy wykonać dwie czynności:

  1. Dodaj "dest" do linii add_argument e.x. dest = "nazwa_użytkownika", co oznacza, że ​​wartość zebrana z linii comamnd zostanie przypisana zmiennej "nazwa użytkownika"
  2. Kiedykolwiek użyjesz takich przypisanych linii poleceń z "dest" po prostu dodaj "args" przed zmienną ex con = sql.connect (host = args.hostname, user = args.username, passwd = args.password)

Sporządzono

Dzięki

AK

+0

http://docs.python.org/3/library/argparse.html dla szczegółów – Urhixidur

+7

Zaakceptowałeś własne rozwiązanie problemu, podczas gdy ** @ Mark ** dostarczył ci odpowiedzi na twoje pytanie. Nie jestem pewien, czy to bardzo miłe ... – Atcold

31

Biblioteka Pythona 3 zawiera 3 moduły do ​​analizowania wiersza poleceń, więc nic więcej nie można dodać do konfiguracji.

Jeden należy użyć jest argparse

import argparse 
parser = argparse.ArgumentParser() 

#-db DATABSE -u USERNAME -p PASSWORD -size 20 
parser.add_argument("-db", "--hostname", help="Database name") 
parser.add_argument("-u", "--username", help="User name") 
parser.add_argument("-p", "--password", help="Password") 
parser.add_argument("-size", "--size", help="Size", type=int) 

args = parser.parse_args() 

print("Hostname {} User {} Password {} size {} ".format(
       args.hostname, 
     args.username, 
     args.password, 
     args.size 
     )) 
+0

Dzięki za odpowiedź i kod. Problem, z którym obecnie borykam się, polega na tym, że mój kod podaje błąd "Niezdefiniowane zmienne" dla zmiennych zdefiniowanych w powyższym kodzie. Jest tak dlatego, że wcześniej ich wartości zostały wyraźnie wymienione w skrypcie, ale po włączeniu kodu przez Mark, wartości nie są rozpoznawane przez skrypt. W skrócie, jak sprawić, by skrypt przyjmował wartości zmiennych z modułu "argparse". Na przykład wcześniej w skrypcie: nazwa_hosta = 127.0.0.1, nazwa_użytkownika = xyz i hasło = abc, ale teraz zostały one zastąpione przez powyższy kod (według Mark), dlatego skrypt teraz mówi "Nieokreślone zmienne". –

Powiązane problemy