Sto sviluppando uno script di gestione che esegue una grande quantità di lavoro tramite una pletora di opzioni della riga di comando. Le prime iterazioni dello script hanno utilizzato optparse per raccogliere l'input dell'utente, quindi basta scorrere la pagina, testare il valore di ciascuna opzione nell'ordine appropriato e, se necessario, eseguire l'azione. Ciò ha portato a una giungla di codice che è davvero difficile da leggere e mantenere.riga di comando arg parsing attraverso l'introspezione
Sto cercando qualcosa di meglio.
La mia speranza è di avere un sistema in cui posso scrivere le funzioni in modo python più o meno normale, e poi quando lo script viene eseguito, ho le opzioni (e il testo di aiuto) generate dalle mie funzioni, analizzate ed eseguite nel ordine appropriato. Inoltre, mi piacerebbe davvero essere in grado di costruire interfacce sub-comando django-stile, dove myscript.py install
opere nettamente distinto dagli myscript.py remove
(opzioni separate, aiuto, ecc)
ho trovato simon willison's optfunc e lo fa molto di questo, ma sembra mancare il segno: voglio scrivere ciascuna OPZIONE come una funzione, piuttosto che provare a comprimere l'intera serie di opzioni in una vasta serie di opzioni.
Immagino un'architettura che comprende un insieme di classi per le funzioni principali e ogni metodo definito della classe corrispondente a una particolare opzione nella riga di comando. Questa struttura offre il vantaggio di avere ciascuna opzione vicino al codice funzionale che modifica, facilitando la manutenzione. La cosa che non so proprio come trattare è l'ordinamento dei comandi, poiché l'ordinamento dei metodi di classe non è deterministico.
Prima di reinventare la ruota: ci sono altri bit di codice esistenti che si comportano in modo simile? Altre cose che sarebbero facili da modificare? Chiedere la domanda ha chiarito il mio modo di pensare su cosa sarebbe bello, ma il feedback sul perché questa è una pessima idea, o su come dovrebbe funzionare sarebbe il benvenuto.
Grazie, questo sembra un buon consiglio. –
Questo è eccellente! –