13

質問がわかりにくいかもしれません。

詳細を明らかにしましょう。私はpython cmdライブラリを使用して独自のCLIフレームワークを実装しています。コマンドを入力せずにEnterボタンを押すと、最後のコマンドが実行されます。これは私がやりたいことではありません。

mycli~: cmd --args
executes command
execution stops
mycli~:[hit enter button]

その後、再度 cmd --args を実行します。しかし、私は新しい行で降りたいだけです。

4

2 に答える 2

10

長い間グーグルで調べた後、これを防ぐための貴重なアドバイスを見つけることができませんでした。cmd ライブラリの内部に入り、メソッドをオーバーライドすることにしました。

cmd がprecmdonecmd、およびpostcmdメソッドを順番に実行することがわかりました。コードをトレースしたところ、onecmd が指定された行を実行するメインのコードであることがわかりました。解析をチェックしてから行をチェックします。line が空の場合、 emptyline メソッドを呼び出し、 lastcmdと呼ばれるグローバル変数である最後のコマンドを返します。emptyline メソッドをオーバーライドすると、問題が修正されました。

これが私が書いたメソッドです。

def emptyline(self):
        """Called when an empty line is entered in response to the prompt.

        If this method is not overridden, it repeats the last nonempty
        command entered.

        """
        if self.lastcmd:
            return self.onecmd(self.lastcmd)

そして、ここに私のものがあります:

def emptyline(self):
        """Called when an empty line is entered in response to the prompt.

        If this method is not overridden, it repeats the last nonempty
        command entered.

        """
        if self.lastcmd:
            self.lastcmd = ""
            return self.onecmd('\n')

大したことではないかもしれませんが、念のため覚えておいてください。

于 2013-05-10T09:24:31.073 に答える