Python 如何制作一个接受命令的控制台应用程序?
一般来说,我对Python和编程比较陌生。我正在编写一个控制台应用程序 如何编写在终端中接受命令的控制台应用程序?例如,终端本身如何接受命令并执行相应的任务。“命令”实际上只是应用程序中由用户调用的函数吗?控制台界面本身只是一个功能吗?例如:Python 如何制作一个接受命令的控制台应用程序?,python,python-3.x,console-application,Python,Python 3.x,Console Application,一般来说,我对Python和编程比较陌生。我正在编写一个控制台应用程序 如何编写在终端中接受命令的控制台应用程序?例如,终端本身如何接受命令并执行相应的任务。“命令”实际上只是应用程序中由用户调用的函数吗?控制台界面本身只是一个功能吗?例如: def console_interface(): user_input = input() if user_input == "some_function": some_function() if user_inp
def console_interface():
user_input = input()
if user_input == "some_function":
some_function()
if user_input == "some_other_function":
some_other_function()
虽然效率不高,但我知道上面的方法是有效的,因为我已经测试过了。这个总体想法正确吗?还是有点离题?Python的标准库提供了一个模块,它完全封装了“接受命令的控制台应用程序”功能:请参阅 在该模块中,命令实际上是类的方法,它的子类
cmd.cmd
:do_this
,do_this
,等等,通过命名约定。上的示例是一个用于海龟图形的丰富的“控制台接受命令”,因此您可以使用它
从教学上讲,您可能希望从中给出的简单得多的示例开始——这是Python 2,但功能基本相同。这一系列优秀的示例需要稍加修改才能在Python3中运行,但应该不会太难
例如,考虑第一个问题:
import cmd
class HelloWorld(cmd.Cmd):
"""Simple command processor example."""
def do_greet(self, line):
print "hello"
def do_EOF(self, line):
return True
if __name__ == '__main__':
HelloWorld().cmdloop()
do_EOF
是用户终止标准输入(Unix上的control-D)时发生的情况;如前所述
(在这种情况下,返回True
终止程序)
要在Python 2中而不是在Python 3中运行此功能,只需更改一行:
print "hello"
这必须成为
print("hello")
因为print
,它是Python 2中的一个语句,现在是Python 3中的一个函数
我发现位于的
cmd.py
源代码也很有启发性,我建议将它们作为“调度”世界的介绍来研究一下 Python的标准库提供了一个模块,该模块完全封装了“接受命令的控制台应用程序”功能:请参阅
在该模块中,命令实际上是类的方法,它的子类cmd.cmd
:do_this
,do_this
,等等,通过命名约定。上的示例是一个用于海龟图形的丰富的“控制台接受命令”,因此您可以使用它
从教学上讲,您可能希望从中给出的简单得多的示例开始——这是Python 2,但功能基本相同。这一系列优秀的示例需要稍加修改才能在Python3中运行,但应该不会太难
例如,考虑第一个问题:
import cmd
class HelloWorld(cmd.Cmd):
"""Simple command processor example."""
def do_greet(self, line):
print "hello"
def do_EOF(self, line):
return True
if __name__ == '__main__':
HelloWorld().cmdloop()
do_EOF
是用户终止标准输入(Unix上的control-D)时发生的情况;如前所述
(在这种情况下,返回True
终止程序)
要在Python 2中而不是在Python 3中运行此功能,只需更改一行:
print "hello"
这必须成为
print("hello")
因为print
,它是Python 2中的一个语句,现在是Python 3中的一个函数
我发现位于的
cmd.py
源代码也很有启发性,我建议将它们作为“调度”世界的介绍来研究一下 您看过cmd
模块了吗?我建议您使用以下方法:如果您只需要发送输入,您可能还需要查看eval()
。一般来说,是的,解析用户的输入就是您正在做的事情。其他解决方案和库都是基于此构建的,并且可能会添加额外的功能或框架,这样您就可以更轻松地扩展它,而不必一直重复所有内容。您是否看过cmd
模块?我建议您使用以下方法:如果您只需要发送输入,您可能还需要查看eval()
。一般来说,是的,解析用户的输入就是您正在做的事情。其他解决方案和库都是基于此构建的,并且可能会添加额外的功能或框架,这样您就可以更轻松地扩展它,而无需一直重复所有内容。