第一次使用 dos 系统运行程序,这个系统下运行和 Python Shell 格式下运行的区别在哪里呢?

Alphabet=“......(内容已省略)”
for element in Alphabet:
if element==" ":
print(element)
else:
print("{}".format(element),end="")
time.sleep(0.04)
大一新生,老师想让我们弄一个自我介绍
省略的内容就是1000字中文
我没有用jieba库分词
两句之间就直接空格 然后对应到程序里就是换行
然后主体我想弄一个0.04s打出一个字的运行效果
在Python Shell也可以得到执行
但在dos窗口下执行却是一行一行地打出来,时间也随着每行的长短不同
感觉效果会差一些....

诚意求大神们指点
谢谢啦

讨论数量: 2
Jason990420

方法1:

sys.stdout本身的定义就是一个会缓冲的输出, 你可以重新定义一个不缓冲的输出, 将以下的代码放到你的程序前, 就可以了.

import sys

class Unbuffered(object):
   def __init__(self, stream):
       self.stream = stream
   def write(self, data):
       self.stream.write(data)
       self.stream.flush()
   def writelines(self, datas):
       self.stream.writelines(datas)
       self.stream.flush()
   def __getattr__(self, attr):
       return getattr(self.stream, attr)

sys.stdout = Unbuffered(sys.stdout)

方法2: print中多加一个参数flush=True

print(element, flash=True)
print("{}".format(element), end="", flash=True)

方法3: 在time.sleep(0.03)前加一行

sys.stdout.flush()
time.sleep(0.03)
4年前 评论
happy_python 4年前
Jason990420

stdout指的是标准输出接口, 也就是你的屏幕. 所有打印的内容会放到缓冲区中, 等到系统有空再显示出来, flush就用来把缓冲区中的内容清出来, 也就是显示到屏幕. 你的程序每打印一个字, 就用flush来动作一次, 因此就不会再有等待, 也就会实时显示在屏幕上了. 記得钩選最佳答案喔 !

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!