2016-01-25 25 views
7

Sto usando argparse per analizzare gli argomenti della riga di comando.Stampa argomenti della riga di comando con argparse?

Per facilitare il debug, desidero specificare print una riga con gli argomenti denominati con lo script Python. C'è un modo semplice per farlo entro argparse?

risposta

11

ArgumentParser.parse_args per impostazione predefinita accetta gli argomenti semplicemente da sys.argv. Quindi, se non si cambia il comportamento (passando in qualcos'altro da parse_args), si può semplicemente stampare sys.argv per ottenere tutti gli argomenti passati allo script Python:

import sys 
print(sys.argv) 

In alternativa, si potrebbe anche solo stampare lo spazio dei nomi che restituisce parse_args; in questo modo si ottiene tutti i valori nel modo in cui il parser argomento li interpretato:

args = parser.parse_args() 
print(args) 
3

Se l'esecuzione argparse all'interno di un altro script Python, come quando si prova dentro unittest, quindi la stampa sys.argv stamperà solo gli argomenti dello script principale, ad esempio:

[ 'C: \ eclipse \ plugins \ org.python.pydev_5.9.2.201708151115 \ pysrc \ runfiles.py', 'C: \ eclipse_workspace \ test_file_sear ch.py', '--port', '58454', '--verbosity', '0']

In questo caso si dovrebbe usare vars per iterare argparse args:

parser = argparse.ArgumentParser(... 
... 
args = parser.parse_args() 
for arg in vars(args): 
    print arg, getattr(args, arg) 

Grazie a: https://stackoverflow.com/a/27181165/658497