2012-06-13 34 views
12

Tôi cần in trên một dòng trong một vòng lặp (Python 3.x). Nhìn xung quanh trên SO đã có, tôi đặt dòng này trong mã của tôi:python: in bằng cách sử dụng dấu xuống dòng và dấu phẩy không hoạt động

print('{0} imported\r'.format(tot),) 

Tuy nhiên, nó vẫn in nhiều dòng khi lặp qua. Tôi cũng đã cố gắng

sys.stdout.write('{0} imported\r'.format(tot)) 

nhưng điều này không in bất cứ điều gì ra cửa sổ Console ...

Bất cứ ai biết những gì đang xảy ra với điều này?

+0

'sys.stdout.write() 'làm việc cho tôi .. bạn có' nhập khẩu sys'. Bạn đang cố gắng che phủ đầu ra trên cùng một dòng? – Levon

+0

Nếu bạn đang cố gắng để có được hiệu ứng tương tự như 'in văn bản, 'từ python 2.x, bạn cần phải sử dụng đối số' kết thúc', như trong 'print (text, end =' ')'. Dấu phẩy ở cuối các đối số hàm không có hiệu lực. – James

+0

Không chắc chắn về "từ 2.x". Dòng 'print (text, end = '')' cho tôi một lỗi cú pháp tại '='. – rossmcm

Trả lời

17

Trong trường hợp đầu tiên, một số hệ thống sẽ xử lý \r làm dòng mới. Trong trường hợp thứ hai, bạn không phải flush dòng. Hãy thử điều này:

sys.stdout.write('{0} imported\r'.format(tot)) 
sys.stdout.flush() 

Flushing dòng là không cần thiết trên tất cả các hệ thống, hoặc, như Levon nhắc nhở tôi - nhưng nó thường là một ý tưởng tốt khi sử dụng \r theo cách này.

+0

@ kevlar1818 Như tôi đã đề cập trong phần bình luận, nó làm việc cho tôi (thậm chí là xóa bộ đệm đầu ra) ... odd – Levon

+0

'sys.stdout.flush()' là những gì tôi cần. Cảm ơn! – kevlar1818

9

Nếu bạn muốn ghi đè dòng cuối cùng, bạn cần thêm \ r (ký tự trả về) và kết thúc = "" để bạn không chuyển sang dòng tiếp theo.

values = range(0, 100) 
for i in values: 
    print ("\rComplete: ", i, "%", end="") 
print ("\rComplete: 100%") 
3

Tôi thích sử dụng các giải pháp của Jan nhưng theo cách này:

values = range(0, 101) 
for i in values: 
    print ("Complete: ", i, "%", end="\r") 
print ("\n\r", end="") 
+3

Dòng cuối cùng của bạn là quá mức cần thiết. Nó sẽ chỉ là 'print()'. –

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