Unificación de pitón línea de comando intérprete y las interfaces de línea de comandos-subcomando comando

StackOverflow https://stackoverflow.com/questions/3703824

Pregunta

Tengo un intérprete de línea de comandos (o "intérprete de comandos de línea por línea" en el pitón docs para el módulo cmd) para un programa que me gustaría añadir la interfaz de línea de comando utilidad para
por ejemplo, una sesión ahora se ve así:. (% para el intérprete de comandos, es mi :) de mensajes personalizados)
% tasks (invoca el intérprete de comandos de línea)
:) clockHours Teaching_Sara_to_coregister_T1_to_T2
:) exit
Además, quiero que esta interfaz:
% tasks clockHours Teaching_Sara_to_coregister_T1_to_T2

Me imagino interpretador de orden personalizados aplicados sobre subcomandos en la utilidad de línea de comandos. ¿Existe una biblioteca para hacer esto juntos? Sería muy bueno para no tener que escribir código de finalización dos veces, dos veces código de estructura de mando, etc. Si no es así, algún consejo para mí si trato de implementar este comportamiento, o pensamientos sobre lo útil que podría ser?

Obviamente perder la ventaja de variables temporales simples, por lo que yo estaba usando el enfoque intérprete para empezar, pero muchos de mis interpretador de orden de encargo no se basan en este comportamiento, o podría ser fácilmente modificado para no requerir que - es ese subconjunto que quiero subcomandos de utilidad de línea de comandos para.

¿Fue útil?

Solución

Módulo cmd puede ser suficiente para lo que quieres si entiendo correctamente su problema.

Su solución final puede estar cerca de debajo de ejemplo:

import cmd
import sys

class MyCmd(cmd.Cmd):
    def do_hello(self, line):
        print "hello"
    def do_exit(self, line):
        return True

if __name__ == '__main__':
    my_cmd = MyCmd()

    if len(sys.argv) > 1:
        my_cmd.onecmd(' '.join(sys.argv[1:]))
    else:
        my_cmd.cmdloop()

dando este comportamiento:

C:\_work\home>jython cmdsample.py hello
hello

C:\_work\home>jython cmdsample.py
(Cmd) hello
hello
(Cmd) exit

C:\_work\home>

Otros consejos

Otra cosa que usted puede encontrar útil es cmdln módulo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top