【问题标题】:Command prompt can't write letter by letter? [duplicate]命令提示符不能一个字母一个字母地写? [复制]
【发布时间】:2015-08-26 18:04:20
【问题描述】:
import time
def textinput(txt,waittime=0.04):
    end = len(txt)
    letters = 0
    while end != letters:
        print(txt[letters], end = '')
        letters += 1
        time.sleep(waittime)
textinput('Hello there!')

这基本上是我逐个字母写单词的功能,它在测试时在 IDLE 上完美运行,但是,当我正常运行它(并打开命令提示符)时,我试图写的内容保持不可见,然后突然立即显示单词。是我输入错误,还是命令提示符的问题?我使用的是 Windows 10。

【问题讨论】:

  • 如果您的程序将字符塞入标准输出缓冲区会发生什么。在某一时刻,操作系统决定刷新缓冲区,您会立即看到所有字符。要一次获得单个字符效果,您必须在写入每个字符后显式刷新缓冲区,如@PadriacCunningham 回答中所示。

标签: python python-3.x


【解决方案1】:

你不需要使用sys,你只需要flush=True

def textinput(txt,waittime=0.4):
    for letter in txt:
        print(letter, end = '',flush=True)
        time.sleep(waittime)

您也可以简单地遍历字符串本身。

【讨论】:

  • 这完全使事情更容易编写和理解!我什至不知道有一个内置的代码......(为什么默认情况下不刷新?)
  • @PopCar,通常输出是行缓冲的,因为您设置 end = "" 是您需要刷新的唯一原因,通常默认行为是您想要的
【解决方案2】:

输出可能已缓冲,尝试通过在打印后添加以下行来刷新它:

sys.stdout.flush()

【讨论】:

  • 完美运行,谢谢!我想我不是系统命令的人...... p.s:你忘了说我应该先导入 sys ,但幸运的是我一看到这个就知道了。
  • print() 可以使用flush=True 为您为您 进行刷新。
【解决方案3】:

问题很可能是标准输出没有被自动刷新,而是被缓冲,为了让您的情况正常工作,您应该手动flush()stdout -

import time
import sys
def textinput(txt,waittime=0.04):
    end = len(txt)
    letters = 0
    while end != letters:
        print(txt[letters], end = '')
        sys.stdout.flush()
        letters += 1
        time.sleep(waittime)
textinput('Hello there!')

【讨论】:

    猜你喜欢
    • 2013-06-11
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2018-07-08
    相关资源
    最近更新 更多