Come costruire un parser in Python

March 9

Come costruire un parser in Python


In Python, come in molte altre lingue, è necessario gestire l'input dell'utente a un programma lanciato dalla riga di comando. La libreria Python "sys" contiene un numero maggiore di parametri specifici del sistema, comprese le funzioni necessarie per gestire gli argomenti dalla riga di comando. La libreria Python "getopt" fornisce un metodo utile per l'analisi di un gran numero di argomenti della riga di comando e bandiere in diversi formati.

Impostare

Aprire un editor di testo e iniziare a scrivere un nuovo documento Python. Formattare il programma come segue. La libreria "sys" contiene le funzioni per la gestione delle variabili degli argomenti. Si striscia sys.argv [0] in quanto è il nome dello script, in questo caso "my_program.py." Il controllo "nome" assicura che lo script è stato chiamato dalla riga di comando, piuttosto che un altro programma.

my_program.py

importazione getopt, SYS

def principale (argv):

Argomento parser andrà qui

se il nome == "principale":
principale (sys.argv [1:])

utilizzando Getopt

Chiamare il "getopt.getopt) (" la funzione all'interno del tuo ") principale (" funzione utilizzando la seguente sintassi. Per questo esempio, gli argomenti di "my_program.py" includono una bandiera "-v" per l'output verbose, una bandiera "-h" o "help" per stampare l'utilizzo, e un "-i" o "--input "per specificare un file di input.

def principale (argv):
provare:

opts, args = getopt.getopt(argv, "hi:v", ["help", "input"]);

salvo: eccetto getopt.GetoptError, err:

print str(err); #print error
usage(); #User-written function to print appropriate usage of program
sys.exit(2);
impostare i valori predefiniti

verbose = False;
input_file = Nessuno;
per o, un in sceglie:

if o in ("-h", "--help"):
usage(); sys.exit();
elif o == "-v":
verbose = True;
elif o in ("-i", "--input"):
input_file = a;
else:
assert False, "Unknown argument."

if (input_file == None):

print "No input file given.";
usage(); sys.exit(2);

utilizzando Argparser

La libreria "argparser" fornisce un modo simile di analizzare argomenti con meno codice e messaggi di errore più dettagliati.

importazione argpase, SYS

def main ():
parser = argparse.ArgumentParser ()
parser.add_argument ( '- i', '- ingresso', dest = 'file_input', type = str, help = "File di input")
parser.add_argument ( '- h', '- help')
parser.add_argument ( '- v', dest = 'verbose', action = 'store_true')
args = parser.parse_args ()

Codice per controllare la validità degli argomenti

considerazioni

Se si sta preparando il programma Python per la distribuzione, è importante gestire tutti i possibili scenari di utilizzo durante il controllo per argomenti di input. Ad esempio, un nome di file deve essere controllato per determinare se si collega a un file del formato appropriato. Altre variabili devono essere controllati per determinare che il loro valore ha un senso all'interno del programma.