2012-10-06 26 views
6

Đoạn mã sau được in từ 1 đến 10 với khoảng thời gian 1 giây ở giữa, tuy nhiên nó chờ 10 giây trước khi in bất cứ thứ gì và sau đó in tất cả một lần. Làm thế nào tôi có thể unbuffer đầu ra?Python sys.stdout.flush() không hoạt động

import sys 
import time 
for count in range(10) : 
    sys.stdout.write(str(count)) 
    sys.stdout.flush() 
    time.sleep(1) 

Trả lời

0

Python 2.7, 3.2 và 3.3 tất cả không cho phép đối số từ khóa trong cuộc gọi viết của bạn. Đó có phải là mã thích hợp không? Chức năng in của khóa học cho phép từ khóa kết thúc và không nên nhầm lẫn với ghi. Viết không thêm ký tự dòng mới.

Xóa đối số từ khóa 'kết thúc' và kiểm tra cho thấy mã hoạt động tốt.

+1

Cảm ơn bạn đã phản hồi nhanh ... Đó là một sai lầm ... ngay cả khi không kết thúc = "" mã vẫn tạm dừng trước khi in mọi thứ cùng một lúc – user1724351

+0

Tôi hoàn toàn không thể tái tạo được vấn đề. Bạn có thể thu hẹp nó xuống một phiên bản python cụ thể bằng cách kiểm tra những người khác? Hệ điều hành nào? – whardier

+0

Mac OSX với python 3.2.3. Nó chỉ không unbuffer – user1724351

1

Tìm thấy vấn đề

import sys 
import time 
for count in range(10) : 
    sys.stdout.write("\b%s" % count) 
    sys.stdout.flush() 
    time.sleep(.1) 

Không biết tại sao python là kỳ lạ như thế này nhưng dường như nó chấp nhận điều này. Mã của bạn nên đã làm việc tốt nhưng tôi đoán python chỉ không thích bạn.

+1

Tôi sử dụng python 3,3 btw để có thể khác trong các phiên bản khác. Đã nghiên cứu nhiều hơn và thấy rằng các đối số trong in ấn "end =" \ r "" sẽ xóa bộ đệm, do đó bạn không cần phải nhập sys và nếu bạn lặp lại bất cứ điều gì bạn in nó sẽ thay thế bất cứ điều gì bạn chỉ cần in. Điều này mang lại cho đầu ra một giao diện thực sự thú vị – Alexander

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