【问题标题】:Prepopulate inputs in Python在 Python 中预填充输入
【发布时间】:2019-11-15 16:56:04
【问题描述】:

我正在尝试在我的 python 脚本中设置一个预先填充的输入。本质上,我要做的是创建一个输入,如果调用该输入,将使用脚本前面设置的变量(用户名和 IP 地址)预先填充。我发现以下帖子 (Is it possible to prefill a input() in Python 3's Command Line Interface?) 有一个建议,但由于某种原因,当我运行它时没有任何反应。

import readline

def input_with_prefill(prompt, text):
    def hook():
        readline.insert_text(text)
        readline.redisplay()
    readline.set_pre_input_hook(hook)
    result = input(prompt)
    readline.set_pre_input_hook()
    return result

我传递给提示变量的任何内容都有效,但文本变量似乎没有任何反应,输入保持空白。如果我在终端中运行脚本,那么我可以看到文本变量,但它位于提示之前并且不可编辑,这违背了我想要做的事情的目的。如果登录失败,这允许用户编辑他们输入的用户名或 IP。

我在 Manjaro Linux 上使用 Python 3.8。任何帮助将非常感激。

【问题讨论】:

  • 您的代码在我的 NixOS 上运行在 Python 3.8 交互式解释器 shell 中。也许您需要检查您是否没有运行 readline 的替代方案,例如 libedit? docs.python.org/3/library/readline.html
  • @MichałKrzysztofFeiler 嗨,感谢您的回复,我没有 libedit 刚刚尝试过,但找不到模块。我肯定在使用 readline 但出于某种原因我只在运行它时看到提示变量(至少从 IDE 中)。我已经从终端外壳再次尝试了它,它似乎已经以这种方式工作并在终端中作为脚本运行(必须有一些变量与我的主脚本中的一个变量一起阻止了该变量在终端中的工作。我'已经尝试过基本的 Python IDLE 和 Spyder,但在运行 IDLE 时它们都没有显示预填充的输入?
  • 这种方法不可能与 IDLE 一起使用 - 它使用 GUI 小部件来接受用户输入,readline 在此过程中不起作用。同样的事情可能适用于任何基于 GUI 的 IDE。

标签: python


【解决方案1】:

给你。这使用了一个嵌套函数,可以“记住”外部函数的上下文:

def my_input_function(preload_lines):  # array of lines to return
    def my_input(prompt=''):
        nonlocal preload_lines
        if preload_lines:
            line = preload_lines[0]
            preload_lines = preload_lines[1:]
            return line
        else:
            return input(prompt)
    return my_input

input_ = my_input_function(['Line 1', 'Line 2'])
print(input_("Next?"))
print(input_("Next?"))
print(input_("Next?"))
print(input_("Next?"))

运行它:

Line 1
Line 2
Next?line3
line3
Next?line4
line4

【讨论】:

    【解决方案2】:

    作为@jasonharper said:

    这种方法不可能与 IDLE 一起使用 - 它使用 GUI 小部件来接受用户输入,readline 在此过程中不起作用。同样的事情可能适用于任何基于 GUI 的 IDE。

    我建议让您的 IDE 启动一个常规终端仿真器,并将所有输入和输出重定向到该程序的所有输入和输出,因为我猜您的生产环境将涉及一个常规终端仿真器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多