2

我有一个应用程序 (CLI),其中包含编辑帐户信息的功能。它通过提出问题并在答案中输入旧值来实现这一点,以便它可以编辑。目前我正在使用该readline模块来执行此操作。我想要另一种方法来做同样的事情来避免这个模块(我想让应用程序在Windows 和 GNU/Linux上运行 python 运行的任何操作系统上的所有功能)。

我最初在以下网站上找到了以下代码(我对其进行了一些修改以适应函数),但由于该线程已有 4 年历史,我想我会在这里问。http://bytes.com/topic/python/answers/471407-default-editable-string-raw_input

import readline
def editInput(question, old_value):
    readline.set_startup_hook(lambda: readline.insert_text(old_value))
    try:
        new_value = raw_input(question)
    finally:
        readline.set_startup_hook(None)
    return new_value

editInput('What\'s the answer? ', '32')

更新:我不一定需要 readline 的替代品(例如 PyReadline)。我只需要相同的结果。我更新了这个问题,提到我不一定需要它在 Windows 和 GNU/Linux 上运行,而是在 python 支持的任何操作系统上运行。所以基本上,只使用非常基本的函数(如sys.stdin等)

4

2 回答 2

1

行编辑功能远非重复。例如,只有一个功能,例如“读取下一个击键而不回显”(甚至在您开始解释该击键的含义以重新定位光标并改变屏幕外观以及文本行的记住内容之前)正在编辑)不能简单地以跨平台的方式完成:您需要msvcrtWindowscurses上的功能和 Unix-y 系统上的功能——并且您对它在Python 支持的任何操作系统上的需求非常巨大,而且不可能满足。

在考虑答案之前,您需要非常严格地界定它必须运行的操作系统/平台集,以及它必须绝对提供的行编辑功能的子集。如果您无法界定这些集合,那么答案很简单:您所要求的是,在其过度笼统的情况下,根本不可能。

于 2010-07-25T02:40:21.463 回答
0

为什么不使用PyReadline?它被 IPython 用于或多或少相同的功能,并且得到了很好的支持。

实际上,擦掉它。我刚刚尝试过,但它不起作用。可能,pyreadline 不支持set_startup_hook.

于 2010-07-25T00:47:28.293 回答