@lenooh thỏa mãn câu hỏi của tôi. Tôi phát hiện ra bài viết này trong khi tìm kiếm 'python đàn áp dòng mới'. Tôi đang sử dụng IDLE3 trên Raspberry Pi để phát triển Python 3.2 cho PuTTY. Tôi muốn tạo một thanh tiến trình trên dòng lệnh PuTTY. Tôi không muốn trang cuộn đi. Tôi muốn một đường ngang để đảm bảo lại cho người dùng khỏi bối rối rằng chương trình đã không bị đình chỉ cũng như không được gửi đến bữa trưa trên một vòng lặp vô hạn vui vẻ - như một lời biện hộ để 'rời xa tôi, tôi đang làm tốt, nhưng điều này có thể mất một thời gian. ' thông điệp tương tác - giống như một thanh tiến trình trong văn bản.
Việc print('Skimming for', search_string, '\b! .001', end='')
khởi tạo tin nhắn bằng cách chuẩn bị cho lần viết màn hình tiếp theo, nó sẽ in ba khoảng trống dưới dạng ⌫⌫⌫ rubout và sau đó là một khoảng thời gian, xóa sạch '001' và kéo dài dòng thời gian. Sau khi nhập search_string
vẹt người dùng,\b!
cắt dấu chấm than của search_string
văn bản của tôi để quay lại khoảng trống mà print()
nếu không thì bắt buộc, đặt dấu câu đúng cách. Tiếp theo là một khoảng trắng và 'dấu chấm' đầu tiên của 'thanh tiến trình' mà tôi đang mô phỏng. Sau đó, thông báo cũng được mồi với số trang (được định dạng theo chiều dài ba với các số 0 đứng đầu) để thông báo cho người dùng rằng tiến trình đang được xử lý và cũng sẽ phản ánh số lượng thời gian mà chúng ta sẽ xây dựng sau đúng.
import sys
page=1
search_string=input('Search for?',)
print('Skimming for', search_string, '\b! .001', end='')
sys.stdout.flush() # the print function with an end='' won't print unless forced
while page:
# some stuff…
# search, scrub, and build bulk output list[], count items,
# set done flag True
page=page+1 #done flag set in 'some_stuff'
sys.stdout.write('\b\b\b.'+format(page, '03')) #<-- here's the progress bar meat
sys.stdout.flush()
if done: #( flag alternative to break, exit or quit)
print('\nSorting', item_count, 'items')
page=0 # exits the 'while page' loop
list.sort()
for item_count in range(0, items)
print(list[item_count])
#print footers here
if not (len(list)==items):
print('#error_handler')
Các thanh thịt tiến độ là trong sys.stdout.write('\b\b\b.'+format(page, '03'))
dòng. Đầu tiên, để xóa sang bên trái, nó sao lưu con trỏ qua ba ký tự số với '\ b \ b \ b' dưới dạng ⌫⌫⌫ và bỏ một khoảng thời gian mới để thêm vào chiều dài thanh tiến trình. Sau đó, nó viết ba chữ số của trang cho đến nay. Vì sys.stdout.write()
chờ bộ đệm đầy đủ hoặc kênh đầu ra đóng,sys.stdout.flush()
buộc phải ghi ngay lập tức. sys.stdout.flush()
được xây dựng vào cuối của print()
nó được bỏ qua với print(txt, end='' )
. Sau đó, mã vòng lặp thông qua các hoạt động đòi hỏi nhiều thời gian trần tục của nó trong khi nó không in thêm gì nữa cho đến khi nó quay lại đây để xóa ba chữ số, thêm một dấu chấm và viết lại ba chữ số, tăng dần.
Ba chữ số được xóa và viết lại không có nghĩa là cần thiết - nó chỉ là một sự khởi sắc mà minh họa sys.stdout.write()
so với print()
. Bạn có thể dễ dàng truy cập vào một khoảng thời gian và quên đi ba dấu gạch chéo ngược ưa thích (tất nhiên là không ghi cả số trang được định dạng) bằng cách chỉ in thanh thời gian dài hơn một lần - không có dấu cách hoặc dòng mới chỉ sử dụng dấu cách sys.stdout.write('.'); sys.stdout.flush()
đôi.
Xin lưu ý rằng trình vỏ Raspberry Pi IDLE3 Python không tôn trọng khoảng lùi dưới dạng ⌫ mà thay vào đó là in một khoảng trắng, thay vào đó tạo ra một danh sách phân số rõ ràng.
- (o = 8> wiz