Python: cmd execute last command while prompt and

2019-02-12 09:05发布

问题:

The question may be not clear enough to get.

Let me clear in details. I'm using python cmd library to implement my own CLI framework and when hit the enter button without typing any command it executes last command. This it not one I wanna do.

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

Then it will execute again cmd --args. However I just want to go down with new line.

回答1:

def emptyline(self):
         pass

Will do just fine!



回答2:

After a long googling I could not find a valuable advise to prevent this. I decide to go inside the cmd library and override the method.

I figured it out that cmd execute precmd, onecmd and postcmd methods sequentially. I traced the code and see that onecmd is the main one which exetues the given line. It checks parses then check the line. If line is empty it calls the emptyline method and it returns the last command which is a global variable called as lastcmd. I override the emptyline method then my issue got fixed.

Here is the method I've written override.

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)

And here is mine:

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

It might not be a big deal but keep that in mind just in case.