代码之家  ›  专栏  ›  技术社区  ›  avacariu

用于在python中将文本插入原始输入(以避免读取)的跨平台方法

  •  2
  • avacariu  · 技术社区  · 15 年前

    我有一个应用程序(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等)

    2 回复  |  直到 15 年前
        1
  •  1
  •   Alex Martelli    15 年前

    行编辑功能远不是简单到重复的。例如,仅仅一个功能,如“在不回音的情况下读取下一个击键”(甚至在您开始输入击键的含义以重新定位光标并更改屏幕外观以及正在编辑的文本行的记忆内容之前),不能以跨平台的方式简单地完成:您需要 msvcrt Windows和上的功能 curses Unix-Y系统上的功能——以及您对其工作的需求 任何 python支持的操作系统非常庞大,无法满足。

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

        2
  •  0
  •   Muhammad Alkarouri    15 年前

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

    事实上,刮擦它。我刚试过,但不管用。可能,吡瑞德林不支持 set_startup_hook .