13

这个问题可能不够清楚,无法得到。

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

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

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

4

2 回答 2

19
def emptyline(self):
         pass

会做得很好!

于 2014-01-11T19:00:03.930 回答
10

经过长时间的谷歌搜索,我找不到防止这种情况的宝贵建议。我决定进入 cmd 库并覆盖该方法。

我发现 cmd 按顺序执行precmdonecmdpostcmd方法。我跟踪了代码,发现 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)

这是我的:

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 回答