Python:cmd在提示符和空行时执行最后一个命令

Fat*_*ana 12 python cmd command-line-interface

这个问题可能不够明确.

让我详细说明一下.我正在使用python cmd库来实现我自己的CLI框架,当按下enter按钮而不键入任何命令时,它会执行最后一个命令.这不是我想做的.

mycli~: cmd --args
executes command
execution stops
mycli~:[hit enter button]
Run Code Online (Sandbox Code Playgroud)

然后它将再次执行cmd --args.但是我只是想换新线.

Joh*_*Doe 14

def emptyline(self):
         pass
Run Code Online (Sandbox Code Playgroud)

会做得好!


Fat*_*ana 7

经过长时间的谷歌搜索,我找不到有价值的建议,以防止这种情况发生.我决定进入cmd库并覆盖该方法.

我想通了cmd 顺序执行precmd,onecmdpostcmd方法.我跟踪代码,看到onecmd是排除给定行的主要代码.它会检查解析然后检查该行.如果line为空,则调用emptyline方法,并返回最后一个命令,该命令是一个名为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:
            return self.onecmd(self.lastcmd)
Run Code Online (Sandbox Code Playgroud)

这是我的:

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')
Run Code Online (Sandbox Code Playgroud)

这可能不是什么大问题,但请记住以防万一.

  • 感谢您解决这个问题。我对 cmd 模块为此操作提供的默认行为感到困惑。 (2认同)