Sto creando un piccolo script Python per gestire diverse classi di server (FTP, HTTP, SSH, ecc)Python ArgParse Subparsers e il collegamento alla funzione corretta
Su ogni tipo di server, siamo in grado di eseguire diversi tipi di azioni (implementare, configurare, controllare, ecc)
ho una classe di base Server
, quindi una classe separata per ogni tipo di server che eredita da questo:
class Server:
...
def check():
...
class HTTPServer(Server):
def check():
super(HTTPServer, self).check()
...
class FTPServer(Server):
def check():
super(FTPServer, self).check()
...
una riga di comando di esempio potrebbe be:
my_program deploy http
Dalla riga di comando, i due argomenti obbligatori di cui ho bisogno sono:
- Operazione per eseguire
- tipo di server per creare/gestire
In precedenza, stavo usando argparse
e l'operazione store
e utilizzando un dict
per abbinare l'opzione della riga di comando al nome effettivo della classe e della funzione. Per esempio:
types_of_servers = {
'http': 'HTTPServer',
'ftp': 'FTPServer',
...
}
valid_operations = {
'check': 'check',
'build': 'build',
'deploy': 'deploy',
'configure': 'configure',
'verify': 'verify',
}
(Nel mio codice vero e proprio, valid_operations non era del tutto un ingenuo mappatura 1: 1.)
E poi utilizzando il codice piuttosto orribile per creare il giusto tipo di oggetto, e chiamare il classe giusta
Quindi ho pensato di utilizzare la funzione subparsers
di argparse per farlo. Quindi ho effettuato ciascuna operazione (controllo, compilazione, distribuzione, ecc.) A subparser.
In genere, potevo collegare ciascun comando secondario a una funzione particolare e chiamarlo. Tuttavia, non voglio chiamare semplicemente una funzione generica check()
- Devo creare il tipo corretto di oggetto prima e quindi chiamare la funzione appropriata all'interno dell'oggetto.
Esiste un modo buono o pietoso per farlo? Preferibilmente uno che non coinvolge un sacco di hardcoding, o mal progettato se/else loops?
Hai provato [Tessuto] (http://fabfile.org/) - Strumento da riga di comando per semplificare l'uso di SSH per la distribuzione delle applicazioni o le attività di amministrazione dei sistemi? – jfs