Biblioteca de clases de envoltura de Python para comandos de Unix con argumentos

Estoy buscando una clase de contenedor de biblioteca para envolver un comando de Unix en una clase de Python (posiblemente para una mayor presentación del comando en la web). Idealmente, las opciones de comando se presentan en la cadena de documentación de mi clase envuelta, y la biblioteca extrae automáticamente (o mediante llamadas a métodos) los argumentos opcionales y requeridos. ¿Has visto u oído hablar de una biblioteca de este tipo ?

Detalles relacionados con la función de la clase contenedora de biblioteca

Digamos que quiero envolver un conjunto de comandos en una clase de Python dedicada, posiblemente para una presentación adicional en una página web que nuevamente podría presentar las diferentes opciones disponibles para el comando. ¿Existe ya una biblioteca así?

Aquí hay una explicación adicional sobre lo que me gustaría de la biblioteca, si existe, basada en un comando algo simplista helloworld, con el siguiente uso:

helloworld [-t <text>] [-n <num>] -U  
    -U          uppercase the output text  
    -t <text>   text to display, defaults to [Hello world]  
    -n <num>    Number of repeats  

Para envolver este comando, me gustaría escribir una clase de Python similar a la siguiente:

class HelloWorld(CommandWrapper):
    """Wrapper around helloworld command.

    Options:
       use_uppercase   -U         Uppercase the output text [false]
       text            -t <text>  Text to display [Hello World]
       repeats         -n <num>   Number of repeats [1]
    """

    def __init__(self, *args):

       self.build_options(__doc__, 'helloworld', args)

Ahora esto podría usarse de la siguiente manera:

 all_defaults = HelloWorld()
 with_args = HelloWorld(number=4, "Cool")

 print("Command with all defaults: {}".format(all_defaults))
 print("Command with arguments: {}".format(with_args))

que imprimiría lo siguiente

Comando con todos los valores predeterminados: helloworld
Comando con argumentos: helloworld -n 4 -t Cool

Opcionalmente , esta clase contenedora de biblioteca también proporcionaría algunos elementos/listas/dictados para usar en una página web donde era posible obtener el nombre del comando y las diversas opciones disponibles (posiblemente con opciones predeterminadas). Con base en esta información, se podría crear un formulario donde fuera posible agregar opciones y elegir valores adecuados para las opciones agregadas.

Parece que está buscando algo similar a ExplainShell: github.com/idank/explainshell
La pregunta no es lo suficientemente clara para mí. ¿Es la extracción de docstring el requisito principal, o es (muy, muy, muy, muy, muy) agradable de tener? ¿Se supone que el contenedor realmente invoca el comando que envuelve, o simplemente genera una cadena que representa un comando que podría ejecutarse (si se escribe en un indicador de shell)? Dado que todavía estoy confundido por esta pregunta, mi mejor suposición para algo que vale la pena investigar es docopt .
@JohnY, la clase debería ejecutar el comando, con una interfaz para los distintos argumentos. El truco es que la biblioteca debe construir la clase contenedora...

Respuestas (2)

Quizás pruebe el módulo 'sh'

pip install sh

Le permite llamar a los comandos como si fueran funciones de python

from sh import ifconfig print ifconfig("eth0")

https://amoffat.github.io/sh/

Esta biblioteca permite llamar a un comando envuelto, pero no comprueba ni documenta qué argumentos son válidos o no. Por lo tanto, permite el manejo aleatorio de argumentos, ¡y eso es justo lo que me gustaría evitar!

Al leer detenidamente la pregunta, deduzco que está buscando presentarle al usuario las opciones que son válidas o que podrían agregarse a un comando específico más que cualquier otra cosa, por lo que sugeriría como punto de partida, ExplainShell .

El objetivo de la shell de explicación es analizar las páginas del manual para determinar cuáles son los posibles argumentos y explicar una línea de comando dada haciendo coincidir cada argumento con el texto de ayuda relevante en la página del manual.

La versión actual de ExplainShell incluye un comparador para analizar una línea de comando determinada y presentar al usuario el texto de ayuda relevante, mientras que necesitaría un constructor para agregar opciones, con argumentos válidos, desde una interfaz de usuario.