Ho un utile script Python che sto invocando dalla riga di comando. Ha un numero decente di opzioni, forse 20, e non è insolito eseguire lo script con sei o sette flag. Quindi il resto dell'input arriva tramite stdin.
Ora ho un altro codice Python dal quale mi piacerebbe chiamare questa utile piccola utilità. Due opzioni che posso pensare sono:
- Posso usare subprocess.call e invocare il mio piccolo script
- (Un po 'meglio) Posso mettere insieme una riga di comando e poi passarla come un elenco di stringhe a
argparse
- Riesco a rifocalizzare completamente il programma in modo che il punto di ingresso della mia utilità sia la chiamata alla funzione Python e poi la mia utilità della riga di comando chiama questa funzione. In linea di principio, questa sembra la cosa responsabile da fare, ma lascia la mia gestione di due interfacce separate alla mia funzione. Ad esempio, devo decidere se voglio che argparse conosca i valori predefiniti per le mie opzioni o che la funzione conosca i valori predefiniti (o che abbia due set di valori predefiniti). Qualsiasi convalida che utilizzo, ad esempio,
ArgumentParser.add_mutually_exclusive_group
non si applica quando il mio strumento viene eseguito come libreria invece di uno script da riga di comando.
Esiste un paradigma standard per la creazione di una singola interfaccia in Python che sia adatta per essere invocata sia da Python che dalla riga di comando?