如何在Python的input()函数中更改用户输入的光标位置?

如何在Python的input()函数中更改用户输入的光标位置?,python,input,Python,Input,在使用input()函数时,我希望从用户获取或接收一个字符串到一个变量。那么,是否可以在方括号内输入而不是纯文本?比如, a = input("-->") 这显示了如下输出: --> --> [ _ ] 但是我可以得到如下输出: --> --> [ _ ] 并将输入置于方括号内。(。表示光标。)调用input()时操纵光标位置需要使用ANSI转义序列。(请参阅@chepner的答案。)要更正确地执行您想要的操作,您需要使用一个可以操纵终

在使用
input()
函数时,我希望从用户获取或接收一个字符串到一个变量。那么,是否可以在方括号内输入而不是纯文本?比如,

a = input("-->")
这显示了如下输出:

-->
--> [ _ ]
但是我可以得到如下输出:

-->
--> [ _ ]

并将输入置于方括号内。(
表示光标。)

调用
input()
时操纵光标位置需要使用ANSI转义序列。(请参阅@chepner的答案。)要更正确地执行您想要的操作,您需要使用一个可以操纵终端的库,例如。

您可以,某种程度上。如果终端支持ANSI转义序列,则可以通过输出
\033[s
保存当前光标位置,并使用
\033[u
将光标移回上次保存的位置。然后调用
输入

a = input("--> [\033[s ]\033[u")

然而,这纯粹是视觉上的:没有什么能阻止你输入“beyond”方括号。主要的限制是,
input
本身对终端一无所知;它只从标准输入中读取,标准输入是行缓冲。
input
在输入完整的行之前不返回任何内容;在输入完整的行之前,它只等待终端发送一些内容。
之类的库诅咒
提供了很多信息或精确处理;例如,如果您尝试在提示符中键入超出
]
范围的内容,它可能会停止对按键的响应。

以下代码段将使用
诅咒
,处理标准可见ascii字符、删除字符和换行符(用于提交)

来自curses导入包装器
def提示符(stdscr,提示符_template=“-->[{}]”):
用户_inp=“”
显示\u str=prompt\u template.format(用户\u inp)
stdscr.addstr(0,0,display_str)
尽管如此:
inp_ch=stdscr.getch()
#标准ASCII字符

如果希望用户输入在括号内?例如:Out[1]:-->[input_here]您是否仅限于
输入
?您可以使用
诅咒
模块来解决此问题。@Alexander我不知道诅咒是如何工作的。有一些关于诅咒的答案,但我无法理解,我也无法导入诅咒模块。这在大多数终端中都无法像您所说的那样工作。同样,如果您是终端不支持ANSI转义序列,这是否意味着您不能键入输入?您可以键入输入。但是,提示可能类似于
[[s][u
,具体取决于终端显示转义字符的方式。建议使用
诅咒
,因为它使用有关当前终端的信息来输出正确的转义序列。是的,我同意。我可以在终端中运行时键入。使用此解决方案,用户将在右括号上键入,而不是移动到c继续将输出括起来,对吗?对:在
input
打印提示后,它会一直阻止,直到用户点击enter。它不会监视击键,也不会指定要执行的任何操作。不完全正确,但我已经投了赞成票,因为我自己的答案并不适合“real”应用程序;
curses
is.@chepner感谢您的支持。为获得更高的技术准确性而重新编写。请随时提出改进建议。