我使用以下代码(来自此处 How to put text in input line: how to ask for user input on the command line while providing a 'default' answer that the user can edit or delete? )提示用户修改默认字符串(在 Windows 上):
import win32console
_stdin = win32console.GetStdHandle(win32console.STD_INPUT_HANDLE)
def input_def(prompt, default=''):
keys = []
for c in str(default):
evt = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
evt.Char = c
evt.RepeatCount = 1
evt.KeyDown = True
keys.append(evt)
_stdin.WriteConsoleInput(keys)
return input(prompt)
if __name__ == '__main__':
name = input_def('Folder name: ', 'it works!!!')
print()
print(name)
我的问题是,有时,一个或多个字符会添加到我的默认字符串中,大多数时候是在开头。也就是说,上面的代码例如会在控制台显示Folder name: Ait Works!!!
。
我的keys
变量似乎有正确的长度,所以我猜_stdin
有问题。是在_stdin
初始化为_stdin = win32console.GetStdHandle(win32console.STD_INPUT_HANDLE)
时发生的吗?我怎样才能摆脱这些随机字符?
最佳答案
在 _stdin.WriteConsoleInput(keys)
之前调用 _stdin.FlushConsoleInputBuffer()
。您可以将此设置为默认 true 选项来刷新输入缓冲区。如果您需要保留现有内容,请将其覆盖为 false。
理想情况下,如果 stdin 是磁盘文件或管道(例如 MSYS 终端)而不是控制台,您的脚本应该支持回退,或者至少在这种情况下优雅地失败。
关于Python:win32console 添加随机字符来提示默认字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53981272/