Python:win32console添加随机字符以提示默认字符串

时间:2018-12-30 20:43:23

标签: python windows console

我正在使用以下代码(从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)时是吗?如何摆脱这些随机字符?

1 个答案:

答案 0 :(得分:1)

_stdin.FlushConsoleInputBuffer()之前致电_stdin.WriteConsoleInput(keys)。您可以将其设为刷新输入缓冲区的默认true选项。如果需要保留现有内容,请将其覆盖为false。

理想情况下,如果stdin是磁盘文件或管道(例如MSYS终端)而不是控制台,或者在这种情况下至少会正常失败,则脚本应该支持后备。