python std仅在需要时输入

python std仅在需要时输入,python,Python,我有这样的密码 downloading(HUGE_FILE) input_var = raw_input("Enter:") 但问题是,当下载()功能正在进行时,如果我按enter键, 插入到输入变量的enter键 这不是我想要的。我希望在下载()完成后接收输入。在Python2.x中没有跨平台的方法来实现这一点,因为对象,包括stdin,基本上是围绕最低公分母版本的C stdio的薄包装 然而,对于大多数*nix系统,可能对于Windows,以及它们之间,都有解决方案,涵盖了运行Pytho

我有这样的密码

downloading(HUGE_FILE)

input_var = raw_input("Enter:")
但问题是,当
下载()功能正在进行时,如果我按enter键,
插入到输入变量的enter键


这不是我想要的。我希望在下载()完成后接收输入。

在Python2.x中没有跨平台的方法来实现这一点,因为对象,包括
stdin
,基本上是围绕最低公分母版本的C stdio的薄包装

然而,对于大多数*nix系统,可能对于Windows,以及它们之间,都有解决方案,涵盖了运行Python终端程序可能需要的所有内容


在大多数*nix系统上(除了Windows之外,几乎所有您可能关心的东西),如果您只关心交互式输入(即,您希望跳过用户在提示时键入的任何内容,但如果从文件或其他程序进行管道输入,则不希望跳过任何内容),则可以使用库执行以下操作:

在某些边缘情况下,这可能不起作用。此外,它还可能破坏某些平台上的支持。但它将主要起作用


在Windows上,这并没有那么简单,但是如果stdin是真正的控制台输入,您可以通过使用API手动删除字符,直到不再有字符为止


在这两种平台上,
stdin.flush
调用可能是不必要的,但从理论上讲,在不刷新的情况下在终端/控制台I/O和stdio I/O之间切换是非法的,在某些边缘情况下,您可能会得到已经读入缓冲区的内容,如果不这样做,这些内容不会被丢弃,因此,安全总比后悔好


那么,你怎么知道你在哪个平台上?您可以检查
platform.system()
或类似的,但最好只检查您想要使用的库(特别是因为您需要检查大量类似Unix的系统,并且并非所有系统都有
termios
,有些甚至可以选择或仅在特定版本或…)中使用它


试着检查一下:击键是由操作系统缓冲的。在请求输入之前,您需要想出一些方法来刷新stdin。如果是一个异步过程,为什么不输入一个暂停直到下载完成?听起来你需要阻塞直到
downloading()
完成,或者有一个繁忙的循环来检查
downloading()
是否完成。这是否可能取决于
downloading()
内部发生的情况,因此您能否向我们展示您是如何进行下载的?谢谢大家的评论。我都试试
downloading(HUGE_FILE)
if sys.stdin.isatty():
    sys.stdin.flush()
    termios.flush(sys.stdin, termios.TCIFLUSH)
    sys.stdin.flush()
input_var = raw_input("Enter:")
downloading(HUGE_FILE)
if sys.stdin.isatty():
    sys.stdin.flush()
    while msvcrt.kbhit():
        msvcrt.getch()
    sys.stdin.flush()
input_var = raw_input("Enter:")
try:
    import termios
    # You can use the Unix code
except ImportError:
    try:
        import msvcrt
        # You can use the Windows code
    except ImportError:
        # You can't use either, just accept the extra characters