Tôi có một tập lệnh Python và tôi muốn làm cho nó hiển thị số tăng từ 0 đến 100% trong thiết bị đầu cuối. Tôi biết làm thế nào để in các con số trên thiết bị đầu cuối nhưng làm thế nào tôi có thể "viết lại" chúng để 0 biến thành 1, 1 thành 2, và như vậy cho đến khi 100?Cách viết lại đầu ra trong terminal
Trả lời
In trở về vận chuyển (\r
) mà không một dòng mới reset con trỏ đến đầu dòng, làm cho in tiếp theo ghi đè lên những gì đã in:
import time
import sys
for i in range(100):
print i,
sys.stdout.flush()
time.sleep(1)
print "\r",
này không xóa dòng, vì vậy nếu bạn cố gắng, nói, in số lượng giảm bằng cách sử dụng phương pháp này, bạn sẽ thấy văn bản còn sót lại từ các bản in trước đó. Bạn có thể giải quyết vấn đề này bằng cách đệm đầu ra của bạn bằng dấu cách hoặc sử dụng một số mã kiểm soát trong các câu trả lời khác.
Công thức này here sẽ chứng minh hữu ích. Sử dụng mô-đun mà như tc, đoạn code sau làm những gì bạn muốn:
from tc import TerminalController
from time import sleep
import sys
term = TerminalController()
for i in range(10):
sys.stdout.write("%3d" % i)
sys.stdout.flush()
sleep(2)
sys.stdout.write(term.BOL + term.CLEAR_EOL)
Các công thức sử dụng terminfo
để có được thông tin về các thiết bị đầu cuối và các công trình trong Linux và OS X đối với một số thiết bị đầu cuối. Tuy nhiên, nó không hoạt động trên Windows. (Cảm ơn piquadrat đã thử nghiệm, theo bình luận bên dưới).
Chỉnh sửa: Công thức cũng cung cấp khả năng sử dụng màu và viết lại một phần của dòng. Nó cũng có một thanh tiến trình văn bản đã sẵn sàng.
theo yêu cầu, tôi đã cố gắng mã của bạn trên Windows (Windows 7, Python 2.7). Đầu ra là "0 1 2 3 4 5 6 7 8 9". –
@piquadrat: cảm ơn rất nhiều. –
Điều này hoạt động nhưng nó quá mức cần thiết. – vy32
Dựa trên this answer, nhưng không có bộ điều khiển thiết bị đầu cuối:
import time
import sys
for i in range(100):
sys.stdout.write("Downloading ... %s%%\r" % (i))
sys.stdout.flush()
time.sleep(1)
Thử nghiệm trên thiết bị đầu cuối GNOME (Linux) và Windows console.
Mẹo: Không chạy ví dụ này trong trình chỉnh sửa IDLE.
Sử dụng blessings package - xóa màn hình của bạn (/ rõ ràng cls) và nhập:
import sys
from blessings import Terminal
from time import sleep # <- boy, does this sound tempting a.t.m.
term = Terminal()
for i in range(6):
with term.location(term.width - 3, term.height - 3):
print('{}'.format(i))
sleep(2)
if (i == 3):
print('what was I doing, again?')
print('done')
Để cài đặt nó từ CheeseShop, chỉ cần ...
pip install blessings
- 1. Làm thế nào để viết lại đầu ra Seq cho vòng lặp vào đầu ra Dòng?
- 2. Vẽ lại màn hình trong terminal
- 3. JacksonProviderProxy viết ra giá trị null trong đầu ra json
- 4. Cách viết đầu ra của AUGraph vào một tệp?
- 5. Viết đầu ra sqlplus vào một tệp
- 6. Ghi lại đầu ra EXE trong PowerShell
- 7. Viết chuỗi vào luồng đầu ra
- 8. Ghi lại đầu ra FFMPEG
- 9. Cách đơn giản nhất để viết thông điệp đầu ra đến 'cửa sổ đầu ra' trong Visual Studio 2010?
- 10. Tải lại Apache2 qua Terminal trong MAC OS X
- 11. Ghi lại đầu ra từ lệnh git?
- 12. C++ - Cách đặt lại cờ thao tác dòng đầu ra
- 13. Làm thế nào để bắt đầu "emacsformacosx" trong terminal
- 14. Cách viết lại URL trong Tomcat 6
- 15. Python 2.x - Viết đầu ra nhị phân thành stdout?
- 16. Quay lại đầu ra từ lệnh "hệ thống" trong Ruby?
- 17. viết dòng lệnh đầu ra vào tập tin
- 18. Ghi lại đầu ra xsl: message trong java
- 19. Ngăn chặn sắp xếp lại trong đầu ra phái sinh?
- 20. Cách viết đầu ra của lệnh ipython trong tệp văn bản python?
- 21. PowerShell: ngăn chặn đầu ra Viết tiến trình
- 22. Qt Creator: Chạy trong Terminal
- 23. Javascript: Viết đầu ra Console.debug() cho trình duyệt?
- 24. Luồng socket/đầu ra java viết: chúng có chặn không?
- 25. Execute dòng lệnh và gửi lại lệnh đầu ra
- 26. chuyển hướng đầu ra tiêu chuẩn bằng c sau đó đặt lại đầu ra tiêu chuẩn
- 27. Cách tránh tất cả sự xuất hiện vùng tên trong đầu ra bằng cách viết một câu lệnh trong XSLT
- 28. Làm thế nào để lặp lại một lệnh thực thi trong terminal trong Linux?
- 29. Cách lọc đầu ra cscope trong Vim
- 30. cách lấy chuỗi đầu ra lệnh linux và trạng thái đầu ra trong C++
là nền tảng này độc lập? –
@ klez: có thể không dành cho tất cả các thiết bị đầu cuối. Nó hoạt động cho máy chữ. Nền tảng đó có đủ độc lập cho bạn không? :) –
Trên hai nền tảng theo ý của tôi (Linux và Windows), nó hoạt động. –