Attualmente, sto usando argparse per analizzare gli argomenti e memorizzare i flags come opzioni booleane. Quindi controllo per vedere quale flag è impostato su true ed eseguire quella funzione. Argparse analizza un file di input, che viene aperto e passato alla funzione chiamata come argomento.argparse chiama una funzione dopo aver analizzato altre opzioni
Quindi:
parser.add_argument('input_data', action='store', help='some help')
parser.add_argument('outputname', action='store',default=None, help='some help')
parser.add_argument('--flag','-f', action='store_true', dest='flag', default=False, help='help!')
devo aprire l'input_data di leggere alcune informazioni da esso prima che la funzione di bandiera si chiama. Questo è attualmente implementato come:
if args.flag == True:
array_out = flag(array_read_from_input)
if args.outputname == None:
name = 'Flag.tif'
E 'possibile subclass argparse di avere la parola chiave azione chiamare una funzione.
È possibile analizzare l'opzione input_data, eseguire alcune elaborazioni e quindi chiamare la funzione flag senza aver annidato i loop per ogni argomento, ad esempio sottoclasse il parametro di azione di argparse?
Non confrontare oggetti con 'True' o' None'. O usate 'is' o usate il valore true dell'oggetto (quindi dovrebbe essere' if args.flag: ... 'e' se args.outputname è None'). Inoltre, sai che puoi creare azioni personalizzate giuste? Basta leggere la documentazione di argparse. – Bakuriu
@Bakuriu "È possibile suddividere la sottoclasse di argparse in modo che la parola chiave action chiami una funzione." La domanda non è se sia possibile creare un'azione personalizzata, ma se tale azione può essere chiamata dopo aver analizzato e manipolato altri argomenti. – Jzl5325
Se vuoi chiamarlo * dopo * l'analisi, allora non capisco quale sia la relazione di 'argparse' nella tua domanda. Quel modulo è lì solo per analizzare la riga di comando ed eventualmente eseguire azioni * durante * l'analisi. Inoltre, non capisco cosa c'è di sbagliato nel doppio 'if'. Come nota a margine: nulla vieta di usare una sottoclasse di [parser] (http://docs.python.org/dev/library/argparse.html#argumentparser-objects) e reimplemente 'parse_args' in modo che la funzione è chiamato lì, ma dovrai ancora mettere un doppio 'se' lì. – Bakuriu