2013-10-02 143 views
0
import select 
import sys 
inputs=[sys.stdin] 
while 1: 
    readable,w,e=select.select(inputs,[],inputs) 
    for r in readable: 
     print 1, 
     raw_input() 
     print 2 
     print 3, 

當我在Ubuntu上嘗試這個python代碼,假設我隨機輸入像'asd'在終止。它顯示:奇怪的行爲蟒蛇的打印

asd 
1 2 
asd 
3 1 2 

看來「打印布拉布拉」,將標準輸入的文件描述符的狀態的影響,但「打印布拉布拉」的行爲不。有人能告訴我那裏發生了什麼事嗎?

+0

什麼是'sb'?這不是一個英文單詞。 –

+0

我的意思是有人,對不起... – user2837543

回答

0

正如在註釋中指出的,您將看到Python 2.x中行緩衝標準輸出的影響:尾隨,print將阻止它發出新行。帶有尾部,的文本在新行出現之前不會被打印。正如你所看到sys.stdout被置換成每次打印後做了flush其他流

#!/usr/bin/env python 
import sys 
class Logger(object): 
    def __init__(self, stream): 
     self.stream = stream 

    def write(self, msg): 
     self.stream.write(msg) 

    def flush(self): 
     pass 

if __name__ == '__main__': 
    sys.stdout = Logger(sys.stdout) 
    print 'User says hello!', 
    print 'Goodbye, cruel world!' 

:你可以用一些簡單的代碼刪除緩存。您還可以看到this threadthis one瞭解更多信息。

+0

感謝您的回覆。 – user2837543

0

有打印XXXXXX之間的差來打印XXXXXX,

print "Yes" 

將打印是以屏幕,並添加\ N(換行)

print "Yes", 

將打印打印是到屏幕而不\ n(換行)

+0

謝謝。但是,你能解釋爲什麼3在我做下一個輸入之前不會出現嗎? – user2837543

+1

@ user2837543你可以檢查[這個問題的更多](http://stackoverflow.com/questions/4009672/python-trailing-comma-after-print-executes-next-instruction) –

+0

@ user2837543你可以編輯後輸出所以它將清楚什麼是輸入和什麼是輸出。你可以用>>>輸入 –