python 初学者的疑惑:
这样写看不到任何输出:(如果crtl+c 中断,事实上是有输出的,只是没有显示出来。这是为什么?)
import time,sys
while 1:
print("#",end="")
time.sleep(2)
这样写可以:
import time,sys
while 1:
print("#")
time.sleep(2)
python 初学者的疑惑:
这样写看不到任何输出:(如果crtl+c 中断,事实上是有输出的,只是没有显示出来。这是为什么?)
import time,sys
while 1:
print("#",end="")
time.sleep(2)
这样写可以:
import time,sys
while 1:
print("#")
time.sleep(2)
以下是大胆地瞎猜内容
在C/C++中,输出到标准输出流里面的内容首先会被写到一个缓冲区内,而不是立即显示在屏幕上,例如下面这个程序
#include <stdio.h>
#include <unistd.h>
int main(void)
{
while (1)
{
printf("%c", '#');
sleep(1);
}
}
编译运行,你不会看到任何输出,因为只有在缓冲区中出现换行符\n
或者你手动清空缓冲区时,里面的内容才会输出到屏幕上。下面这个程序就可以
#include <stdio.h>
#include <unistd.h>
int main(void)
{
while (1)
{
printf("%c", '#');
fflush(stdout);
// 或者直接这样
// printf("%c\n", '#');
sleep(1);
}
}
所以python解释器里面的标准输出可能也是带缓冲的,你的第一个例子是没有\n
的,而第二个是有的。
简单查了一下资料也发现是这样的,可以用sys.stdout.flush()
或者采用楼上的方案
3 回答2.7k 阅读✓ 已解决
2 回答1.6k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
4 回答1.5k 阅读
3 回答1.4k 阅读
2 回答1k 阅读✓ 已解决
print函数会先将数据读入一个缓冲区,直到遇到换行符或者数据达到缓冲区大小(这里是8KB),才将数据写入sys.stdout。
也就是说,你的第一个code等个8192*2多秒(实际上不止)就能看到它的输出了。