L'unification de interpréteur de ligne de commande python et interfaces de ligne de commande commande la sous

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

Question

I ai un interpréteur de ligne de commande (ou « interpréteur de commande orienté ligne » dans le python docs pour le module cmd) pour un programme que je voudrais ajouter l'interface utilitaire de ligne de commande pour
par exemple, maintenant une apparence de session comme ceci:. (% pour l'invite du shell, :) est mon cUSTOM pROMPT)
% tasks (invoque interpréteur de ligne de commande)
:) clockHours Teaching_Sara_to_coregister_T1_to_T2
:) exit
De plus, je veux cette interface:
% tasks clockHours Teaching_Sara_to_coregister_T1_to_T2

I envisager des commandes d'interprétation personnalisées mappées sur les sous-commandes de la ligne de commande utilitaire. Est-ce qu'il existe une bibliothèque pour faire ces choses ensemble? Ce serait génial de ne pas avoir à écrire du code d'achèvement à deux reprises, le code de la structure de commande deux fois, etc. Dans le cas contraire, des conseils pour moi si je tente de mettre en œuvre ce comportement, ou réflexions sur l'utilité qu'il pourrait être?

Il est évident que je perds l'avantage de simples variables temporaires, ce qui est la raison pour laquelle j'utilisais l'approche d'un interprète pour commencer, mais beaucoup de mes commandes d'interpréteur personnalisé ne comptez pas sur ce comportement, ou pourrait être facilement modifié de ne pas exiger - il est le sous-ensemble que je veux en ligne de commande pour les sous-commandes.

Était-ce utile?

La solution

module cmd peut être suffisant pour ce que vous voulez si je comprends bien votre problème.

Votre solution finale peut être proche exemple ci-dessous:

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()

donnant ce comportement:

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

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

C:\_work\home>

Autres conseils

Une autre chose que vous pouvez trouver utile est cmdln module.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top