在 Python 中诅咒命令行应用程序
Curses Command Line Application in Python
我正在编写一个命令行控制台应用程序,它接收用户的输入并将其解释为命令并执行必要的操作(如 metasploit 控制台)。我的应用程序已经完成并准备就绪,但我的问题是我使用不处理箭头键的 input()
函数实现了它。如果我输错了一些东西而没有注意到它,我必须删除每个字符回到那个错字并重新输入命令的其余部分。我想以一种接受箭头键在字符周围导航的方式来实现它。有谁知道怎么做吗?
(正如我在上面指定的那样,我正在尝试找到一种方法来使用 curses 库来做到这一点。但是任何其他可以满足我需要的库都将受到高度赞赏)
代码示例:
while True:
command = input("command >")
if command == "say_hello":
print("Hello")
elif command == "exit":
exit()
else:
print("Undefined command")
尝试使用 Python 的内置 cmd library。您将子 class cmd.Cmd
然后为每个您想要识别的命令编写 do_*
方法:
import cmd
class SimpleAppShell(cmd.Cmd):
"""A simple example of Python's Cmd library."""
prompt = "command > "
def do_say_hello(self, arg):
print("Hello")
def do_exit(self, arg):
print("Goodbye")
exit()
if __name__ == "__main__":
SimpleAppShell().cmdloop()
因为 cmd.Cmd
默认使用 readline library (the Python interface to GNU Readline), you'll get the ability to move the cursor around and edit the line input by default, as well as a whole bunch of other helpful behavior out-of-the-box. See this PyMOTW post 以获得更多信息和示例。
我正在编写一个命令行控制台应用程序,它接收用户的输入并将其解释为命令并执行必要的操作(如 metasploit 控制台)。我的应用程序已经完成并准备就绪,但我的问题是我使用不处理箭头键的 input()
函数实现了它。如果我输错了一些东西而没有注意到它,我必须删除每个字符回到那个错字并重新输入命令的其余部分。我想以一种接受箭头键在字符周围导航的方式来实现它。有谁知道怎么做吗?
(正如我在上面指定的那样,我正在尝试找到一种方法来使用 curses 库来做到这一点。但是任何其他可以满足我需要的库都将受到高度赞赏)
代码示例:
while True:
command = input("command >")
if command == "say_hello":
print("Hello")
elif command == "exit":
exit()
else:
print("Undefined command")
尝试使用 Python 的内置 cmd library。您将子 class cmd.Cmd
然后为每个您想要识别的命令编写 do_*
方法:
import cmd
class SimpleAppShell(cmd.Cmd):
"""A simple example of Python's Cmd library."""
prompt = "command > "
def do_say_hello(self, arg):
print("Hello")
def do_exit(self, arg):
print("Goodbye")
exit()
if __name__ == "__main__":
SimpleAppShell().cmdloop()
因为 cmd.Cmd
默认使用 readline library (the Python interface to GNU Readline), you'll get the ability to move the cursor around and edit the line input by default, as well as a whole bunch of other helpful behavior out-of-the-box. See this PyMOTW post 以获得更多信息和示例。