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

标签 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)时发生的吗?我怎样才能摆脱这些随机字符?

最佳答案

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

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

关于Python:win32console 添加随机字符来提示默认字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53981272/

相关文章:

c# - 控制台颜色: more than 1 in same line?

c - Scanf 和 printf 返回不同的 unicode 字符

python - 使用 python 读取 Prometheus 指标

windows - 如何从 Microsoft 为 Windows 10 签署我的微型筛选器驱动程序

javascript - 我想在 chrome 的控制台中显示一个对象的值

c# - 获取Python可执行文件路径

c++ - 如何以编程方式检索 C++ 中 64 位进程的详细信息?

python - 属性错误 : 'Tensor' object has no attribute '_keras_shape' when creating a model in keras

python - 如何在 datetime python 中使用毫秒而不是微秒

python - 在不同大小的框架之间切换