【问题标题】:Python: win32console adds random characters to prompt default stringPython:win32console添加随机字符提示默认字符串
【发布时间】:2018-12-30 20:43:22
【问题描述】:

我正在使用以下代码(来自此处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) 的时候吗?我怎样才能摆脱这些随机字符?

【问题讨论】:

  • @eryksun 就是这样!

标签: python windows console


【解决方案1】:

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

理想情况下,如果标准输入是磁盘文件或管道(例如 MSYS 终端)而不是控制台,则您的脚本应该支持回退,或者至少在这种情况下正常失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多