我正在使用以下代码(从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)
时是吗?如何摆脱这些随机字符?
答案 0 :(得分:1)
在_stdin.FlushConsoleInputBuffer()
之前致电_stdin.WriteConsoleInput(keys)
。您可以将其设为刷新输入缓冲区的默认true选项。如果需要保留现有内容,请将其覆盖为false。
理想情况下,如果stdin是磁盘文件或管道(例如MSYS终端)而不是控制台,或者在这种情况下至少会正常失败,则脚本应该支持后备。