2012-07-22 7 views
6

Devo immettere i parametri dalla riga di comando, nome utente, password e nome del database. So come farlo senza usare i flag, usando 'sys.argv' (come sotto).Aggiungere gli argomenti della riga di comando con i flag in 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 

Quindi, potrebbe essere eseguito come:

$ test.py database di nomi utente pasword

Ma il problema è che devo usare 'bandiere'. Quindi, lo script può essere eseguito in questo modo:

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

Come posso utilizzare bandiere di prendere gli argomenti da linea di comando? Apprezzerei il tuo aiuto su questo.

risposta

6

Prima di tutto grazie a Mark per il codice 'argparse'. Ho trovato il modo di prendere argomenti dalla riga di comando specificata dalle bandiere. Sto incollando il codice qui sotto che utilizza un codice modificato 'Mark' e un piccolo modulo che mostra come utilizzare gli argomenti raccolti tramite riga di comando:

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 

Uno della mia preoccupazione era come usare le variabili di argomenti per il codice . Per che due cose debbano essere fatte

  1. Aggiungi 'dest' alla riga add_argument e.x. dest = "username" che significa che il valore raccolto dalla riga di comando sarà assegnato alla variabile 'username'
  2. Ogni volta che si usano variabili di comando assegnate da 'dest', basta aggiungere 'args' prima della variabile ex con = sql.connect (host = args.hostname, user = args.username, passwd = args.password)

Fatto

Grazie

AK

+0

http://docs.python.org/3/library/argparse.html per i dettagli – Urhixidur

+7

Hai accettato la tua soluzione problema, mentre ** @ Mark ** ti ha fornito una risposta alla tua domanda. Non sono sicuro che sia molto gentile ... – Atcold

31

La libreria python 3 include 3 moduli per l'analisi della riga di comando, quindi niente extra da aggiungere alla configurazione.

quello che si dovrebbe usare è 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

Grazie per la risposta e il codice. Il problema che sto affrontando ora è che il mio codice sta dando errore "Variabili non definite" per le variabili definite nel codice precedente. Questo perché, prima, i loro valori venivano esplicitamente citati all'interno dello script ma dopo aver incluso il codice di Mark, i valori non venivano riconosciuti dallo script. In breve, come faccio a far sì che lo script prenda i valori delle variabili dal modulo 'argparse'. Per es. prima nello script: hostname = 127.0.0.1, username = xyz e password = abc ma ora questi sono stati sostituiti dal codice sopra (da Mark), quindi lo script ora dice 'Variabili non definite'. –

Problemi correlati