有没有 Python(3)本地等效的方法来调用使用 rlwrap 的脚本?

5
我正在使用 input() 在 Python (3) CLI 脚本中询问用户命令。
我希望他们能够按下 来重复使用旧的命令。为此,我还希望他们能够进行其他基本的行编辑。
我可以通过运行 rlwrap myscript.py 来获得这些功能,但我不想运行包装脚本。(是的,我可以设置别名,但如果可能的话,我想将其封装在脚本中)
是否有一个库来实现这个(例如提供一个历史/编辑感知版本的 input()),或者我需要从头开始写?

5
你可以使用标准库中的 readline 模块 - Klaus D.
2
python-prompt-toolkit - 它使用 readline 和更多功能。 - furas
标准的 cmd 也使用 readline,但它可能需要更多的更改 - 每个命令都必须在单独的函数 do_commandname() 中。类似的 cmd2 具有更多的功能。 - furas
1个回答

3

感谢评论区中发布的答案。我尝试了@furas的建议,似乎运行良好。以下代码段可以帮助其他通过搜索而来的人。

from prompt_toolkit import prompt       
from prompt_toolkit import PromptSession
from prompt_toolkit.history import FileHistory
from os.path import expanduser

myPromptSession = PromptSession(history = FileHistory(expanduser('~/.myhistory')))

while True:
  userInput = myPromptSession.prompt('Enter command')
  print("{}, interesting.".format(userInput))

prompt 是主要的执行函数,但是如果不使用 PromptSession,则无法获取历史记录。 如果不使用 history 选项,则历史记录将在内存中维护,并在程序退出时丢失。

https://python-prompt-toolkit.readthedocs.io/en/master/index.html


1
有点跑题,但 ptpython REPL 值得一看。由同一个人编写(我认为)并孵化了这个项目,它是标准 Python shell 的更好替代品。在我看来比 IPython 更好。 - Holloway

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接