2013-06-27 42 views
7

Tôi muốn in một số câu lệnh gỡ rối trong một vòng lặp trong chức năng của mình và tôi sử dụng IPython để gọi hàm. Hãy để một chức năng ví dụ là:Cách xóa các câu lệnh in trong IPython

def test_print(): 
    import time 
    for i in range(5): 
     time.sleep(2) 
     print i, time.time() 

Kết quả là như sau:

0 1372337149.84 
1 1372337151.84 
2 1372337153.85 
3 1372337155.85 
4 1372337157.85 

Tôi hy vọng mỗi hàng được in, sau đó đợi 2 giây. Nhưng hành vi như sau. đầu tiên tôi quan sát:

0 1372337149.84 
1 

Sau đó, sau 2 giây tôi quan sát tem thời điểm 1 và id của hàng tiếp theo, đó là 2. Tôi quan sát dấu thời gian cuối cùng. Tôi không thể hiểu tại sao nó cư xử như thế này thay vì một hàng tại một thời điểm. Có suy nghĩ gì không? Tôi có cần một chức năng tuôn ra đặc biệt để in những gì đang chờ được in?

+0

Nó hoạt động bình thường đối với tôi. – Doorknob

+0

Sử dụng CPython nó hoạt động như mong đợi. Đối với cả Linux và Windows. – Elazar

+0

Tôi đang sử dụng Canopy 1.0.1. Nó có Python 2.7.3 64 bit trong đó. – petrichor

Trả lời

11

Tôi chưa bao giờ sử dụng IPython, nhưng nó sẽ đủ để xả sạch stdout sau mỗi câu lệnh print.

Something như thế này nên làm việc ...

def test_print(): 
    import time 
    import sys 
    for i in range(5): 
     time.sleep(2) 
     print i, time.time() 
     sys.stdout.flush() 
+4

Tuy nhiên, 'print' tự động thêm dòng mới, vì vậy nó sẽ bị xóa. – Elazar

+1

@Elazar Trong CPython, có lẽ. Có lẽ IPython hoạt động khác nhau. – Aya

+0

Nó hoạt động ngay bây giờ, cảm ơn rất nhiều. – petrichor

Các vấn đề liên quan