鍍金池/ 問答/Python  網絡安全/ print輸出后time.sleep(n),如果輸出不換行,為什么看不到任何輸出

print輸出后time.sleep(n),如果輸出不換行,為什么看不到任何輸出?

python 初學者的疑惑:

這樣寫看不到任何輸出:(如果crtl+c 中斷,事實上是有輸出的,只是沒有顯示出來。這是為什么?)

import time,sys

while 1:
    print("#",end="")
    time.sleep(2)

這樣寫可以:

import time,sys

while 1:
    print("#")
    time.sleep(2)

回答
編輯回答
孤客

以下是大膽地瞎猜內容
在C/C++中,輸出到標準輸出流里面的內容首先會被寫到一個緩沖區(qū)內,而不是立即顯示在屏幕上,例如下面這個程序

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    while (1)
    {
        printf("%c", '#');
        sleep(1);
    }
}

編譯運行,你不會看到任何輸出,因為只有在緩沖區(qū)中出現換行符\n 或者你手動清空緩沖區(qū)時,里面的內容才會輸出到屏幕上。下面這個程序就可以

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    while (1)
    {
        printf("%c", '#');
        fflush(stdout);
        // 或者直接這樣
        // printf("%c\n", '#');
    sleep(1);
    }
}

所以python解釋器里面的標準輸出可能也是帶緩沖的,你的第一個例子是沒有\n 的,而第二個是有的。

簡單查了一下資料也發(fā)現是這樣的,可以用sys.stdout.flush() 或者采用樓上的方案

2018年2月9日 03:55
編輯回答
挽青絲

感謝詳盡回答!

2017年2月16日 23:42
編輯回答
雨蝶
import time

while 1:
    print("#", end="", flush=True)
    time.sleep(2)

print函數會先將數據讀入一個緩沖區(qū),直到遇到換行符或者數據達到緩沖區(qū)大小(這里是8KB),才將數據寫入sys.stdout。
也就是說,你的第一個code等個8192*2多秒(實際上不止)就能看到它的輸出了。

2018年4月18日 14:30