Python CLI是否继续执行相同的命令?

Python CLI是否继续执行相同的命令?,python,command-line-interface,python-idle,Python,Command Line Interface,Python Idle,我试图创建一个命令行,允许用户执行各种功能。 例如,如果我在终端中键入“scriptrun”,我希望它从另一个.py文件运行函数,然后返回到终端(->)。 出于某种原因,如果我键入“scriptrun”,它将正常运行,但如果我再次单击“enter”,它将导致命令再次运行。我是根据我找到的一只海龟做的。输入“帮助”后,我希望它只显示一次帮助主题列表,然后如果我继续按enter键,它将只显示终端,但发生了以下情况!: (终端)帮助 文档化命令(键入帮助): bye color goto帮助左侧位置重

我试图创建一个命令行,允许用户执行各种功能。 例如,如果我在终端中键入“scriptrun”,我希望它从另一个.py文件运行函数,然后返回到终端(->)。 出于某种原因,如果我键入“scriptrun”,它将正常运行,但如果我再次单击“enter”,它将导致命令再次运行。我是根据我找到的一只海龟做的。输入“帮助”后,我希望它只显示一次帮助主题列表,然后如果我继续按enter键,它将只显示终端,但发生了以下情况!:

(终端)帮助

文档化命令(键入帮助): bye color goto帮助左侧位置重置脚本运行 圆前向主播放记录右撤消

(终端)[这里我刚按了回车键,但在下面你可以看到它再次调用帮助函数!]

文档化命令(键入帮助): bye color goto帮助左侧位置重置脚本运行 圆前向主播放记录右撤消

(终点站)

下面是我试图找出解决方案的示例代码:

import cmd, sys
from turtle import *
from orion_package import *

class TurtleShell(cmd.Cmd):
    intro = 'Welcome to the turtle shell.   Type help or ? to list commands.\n'
    prompt = '(Terminal) '
    file = None


    # ----- basic turtle commands -----
    def do_forward(self, arg):
        'Move the turtle forward by the specified distance:  FORWARD 10'
        forward(*parse(arg))
    def do_right(self, arg):
        'Turn turtle right by given number of degrees:  RIGHT 20'
        right(*parse(arg))
    def do_left(self, arg):
        'Turn turtle left by given number of degrees:  LEFT 90'
        left(*parse(arg))
    def do_goto(self, arg):
        'Move turtle to an absolute position with changing orientation.  GOTO 100 200'
        goto(*parse(arg))
    def do_home(self, arg):
        'Return turtle to the home postion:  HOME'
        home()
    def do_circle(self, arg):
        'Draw circle with given radius an options extent and steps:  CIRCLE 50'
        circle(*parse(arg))
    def do_position(self, arg):
        'Print the current turle position:  POSITION'
        print('Current position is %d %d\n' % position())
    def do_heading(self, arg):
        'Print the current turle heading in degrees:  HEADING'
        print('Current heading is %d\n' % (heading(),))
    def do_color(self, arg):
        'Set the color:  COLOR BLUE'
        color(arg.lower())
    def do_undo(self, arg):
        'Undo (repeatedly) the last turtle action(s):  UNDO'
    def do_reset(self, arg):
        'Clear the screen and return turtle to center:  RESET'
        reset()
    def do_bye(self, arg):
        'Stop recording, close the turtle window, and exit:  BYE'
        print('Thank you for using Turtle')
        self.close()
        bye()
        return True


    # ----- record and playback -----
    def do_record(self, arg):
        'Save future commands to filename:  RECORD rose.cmd'
        self.file = open(arg, 'w')
    def do_playback(self, arg):
        'Playback commands from a file:  PLAYBACK rose.cmd'
        self.close()
        with open(arg) as f:
            self.cmdqueue.extend(f.read().splitlines())
    def precmd(self, line):
        line = line.lower()
        if self.file and 'playback' not in line:
            print(line, file=self.file)
        return line
    def close(self):
        if self.file:
            self.file.close()
            self.file = None

    def do_scriptrun(self, arg):
        'Run the script: SCRIPTRUN'
        print("Let's run this thing!  :)")
        scriptrun()


def parse(arg):
    'Convert a series of zero or more numbers to an argument tuple'
    return tuple(map(int, arg.split()))


if __name__ == '__main__':
    TurtleShell().cmdloop()
非常感谢您对解决方案的任何帮助或建议!谢谢!:)

第四项是

“键入空行会重复最后一个命令”


所以这是有记录的

最好的解决方案似乎是简单地制作自己的cmd版本,这样您就可以修改此条件,然后将其包含在项目中并导入,这样您就可以让它重复(终端):每次按enter键,而不是重复上一个命令

谢谢你指出这一点,乔恩。是否有任何可能的方法来解决这个问题,也许不必修改cmd文件?实际上,它并不是在所有情况下都重复最后一个命令。例如,当我尝试重置或使用蓝色时,情况并非如此!。。。嗯,你想让它忽略一个空行吗?嗯,我以前从未使用过cmd,但是查看文档,我发现您可以使用一些钩子。我特别看好emptyline()钩子是的,目标基本上就是让它无限期地重复:(终端):(终端):(终端):直到我停止输入空行。谢谢,我会看看的!不,谢谢!我以前从未见过cmd库,它看起来非常有用!我也在想同样的事情。我最后做的是使用cmd,在我的工作目录中将其修改为cmd2,然后将emptyline的return语句更改为以下内容::
if self.lastcmd:return[]
一个简单的修复程序!:)
>>> help (cmd)