Estoy creando un pequeño script en Python para manejar diferentes tipos de servidores (FTP, HTTP, SSH, etc.)Python argparse Subparsers y ligarse a la función correcta
En cada tipo de servidor, podemos realizar diferentes tipos de acciones (desplegar, configurar, cheque, etc.)
que tienen una clase base Server
, a continuación, una clase separada para cada tipo de servidor que se hereda de esto:
class Server:
...
def check():
...
class HTTPServer(Server):
def check():
super(HTTPServer, self).check()
...
class FTPServer(Server):
def check():
super(FTPServer, self).check()
...
una línea de comandos de ejemplo podría be:
my_program deploy http
Desde la línea de comandos, los dos argumentos obligatorios que necesito son:
- operación a realizar
- Tipo de servidor para crear/administrar
Anteriormente, yo estaba usando argparse
y la operación store
, y usando un dict
para hacer coincidir la opción de la línea de comando con la clase real y el nombre de la función. Por ejemplo:
types_of_servers = {
'http': 'HTTPServer',
'ftp': 'FTPServer',
...
}
valid_operations = {
'check': 'check',
'build': 'build',
'deploy': 'deploy',
'configure': 'configure',
'verify': 'verify',
}
(En mi código real, valid_operations no era bastante ingenua 1: 1 de mapeo.)
Y a continuación, utilizando código en lugar horrible para crear el tipo de objeto, y llamar a la clase correcta
Luego pensé que usaría la función subparsers
de argparse para hacerlo en su lugar. Así que hice que cada operación (verificar, construir, implementar, etc.) fuera subparser.
Normalmente, podría vincular cada subcomando a una función en particular y hacer que lo llame. Sin embargo, no quiero simplemente llamar a una función genérica check()
- Necesito crear el tipo correcto de objeto primero, y luego llamar a la función apropiada dentro de ese objeto.
¿Hay alguna manera buena o pítica de hacer esto? Preferiblemente uno que no involucra una gran cantidad de hardcoding, o mal diseñado si/else loops?
Ha intentado [Tela] (http://fabfile.org/) - ¿herramienta de línea de comandos para optimizar el uso de SSH para implementación de aplicaciones o tareas de administración de sistemas? – jfs