【发布时间】: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