Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: cmd execute last command while prompt and empty line

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.

like image 849
Fatih Karatana Avatar asked May 10 '13 09:05

Fatih Karatana


2 Answers

def emptyline(self):
         pass

Will do just fine!

like image 182
John Doe Avatar answered Sep 23 '22 11:09

John Doe


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.

like image 37
Fatih Karatana Avatar answered Sep 22 '22 11:09

Fatih Karatana