@lenooh พอใจแบบสอบถามของฉัน ฉันค้นพบบทความนี้ในขณะที่ค้นหา 'หลามปราบปรามการขึ้นบรรทัดใหม่' ฉันใช้ IDLE3 กับ Raspberry Pi เพื่อพัฒนา Python 3.2 สำหรับ PuTTY ฉันต้องการสร้างแถบความคืบหน้าในบรรทัดคำสั่ง PuTTY ฉันไม่ต้องการให้หน้าเลื่อนออกไป ฉันต้องการเส้นแนวนอนเพื่อให้ความมั่นใจกับผู้ใช้อีกครั้งว่าโปรแกรมไม่ได้หยุดชะงักหรือไม่ได้ถูกส่งไปรับประทานอาหารกลางวันในวงวนที่ไม่มีที่สิ้นสุดร่าเริง - เป็นข้ออ้างที่จะ 'ปล่อยฉันไปฉันทำได้ดี แต่อาจใช้เวลาสักครู่ ' ข้อความโต้ตอบ - เช่นแถบความคืบหน้าในข้อความ
print('Skimming for', search_string, '\b! .001', end='')
เริ่มต้นข้อความโดยการเตรียมความพร้อมสำหรับหน้าจอเขียนต่อไปซึ่งจะพิมพ์สาม backspaces เป็น rubout ⌫⌫⌫แล้วระยะเวลาเช็ดปิด '001' และขยายสายของงวด หลังจากsearch_string
นกแก้วใส่ผู้ใช้,\b!
ตัดขอบเครื่องหมายอัศเจรีย์ของsearch_string
ข้อความของฉันเพื่อกลับไปยังพื้นที่ซึ่งprint()
บังคับให้ใส่เครื่องหมายวรรคตอนอย่างถูกต้อง ตามด้วยช่องว่างและ 'จุด' แรกของ 'แถบความคืบหน้า' ซึ่งฉันกำลังจำลอง โดยไม่จำเป็นข้อความจะถูกเตรียมด้วยหมายเลขหน้า (จัดรูปแบบเป็นความยาวสามด้วยศูนย์นำหน้า) เพื่อแจ้งให้ทราบจากผู้ใช้ว่ามีการประมวลผลความคืบหน้าและซึ่งจะสะท้อนการนับระยะเวลาที่เราจะสร้างในภายหลัง ขวา.
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')
แถบความคืบหน้าอยู่ในsys.stdout.write('\b\b\b.'+format(page, '03'))
บรรทัด ก่อนอื่นให้ลบไปทางซ้ายมันจะสำรองเคอร์เซอร์ไว้เหนืออักขระตัวเลขสามตัวด้วย '\ b \ b \ b' เป็น⌫⌫⌫ rubout และลดระยะเวลาใหม่เพื่อเพิ่มความยาวของแถบความคืบหน้า จากนั้นมันจะเขียนตัวเลขสามหลักของหน้าเว็บที่ไปถึง เนื่องจากsys.stdout.write()
รอบัฟเฟอร์เต็มหรือช่องสัญญาณเอาต์พุตเพื่อปิดsys.stdout.flush()
บังคับให้เขียนทันที sys.stdout.flush()
ถูกสร้างขึ้นในท้ายที่สุดซึ่งจะข้ามกับprint()
print(txt, end='' )
จากนั้นโค้ดจะวนซ้ำไปตามการดำเนินการที่ใช้เวลาอย่างมากในขณะที่มันพิมพ์อะไรอีกมากจนกระทั่งมันกลับมาที่นี่เพื่อล้างตัวเลขสามหลักย้อนกลับเพิ่มจุดและเขียนตัวเลขสามหลักอีกครั้งเพิ่มขึ้น
ตัวเลขสามหลักที่ถูกเช็ดและเขียนใหม่นั้นไม่จำเป็นเลย - มันเป็นเพียงความรุ่งเรืองที่เป็นตัวอย่าง sys.stdout.write()
print()
เมื่อเทียบกับ คุณสามารถทำได้อย่างง่ายดายเพียงช่วงเวลาหนึ่งและลืม backslash-b ⌫ backspaces แฟนซี (แน่นอนว่าไม่ได้เขียนจำนวนหน้าที่มีการจัดรูปแบบด้วย) โดยเพียงแค่พิมพ์แถบระยะเวลานานขึ้นทีละครั้งโดยไม่ต้องเว้นวรรคหรือขึ้นบรรทัดใหม่sys.stdout.write('.'); sys.stdout.flush()
คู่.
โปรดทราบว่าเชลล์ Raspberry Pi IDLE3 Python ไม่ได้ให้เกียรติ backspace ว่าเป็น⌫ rubout แต่จะพิมพ์ช่องว่างแทนเพื่อสร้างรายการเศษส่วนที่ชัดเจนแทน
- (o = 8> ตัวช่วย