2008-11-10 34 views
5

Tôi có một kịch bản Perl nhỏ (Trên Windows) để kiểm tra một số tệp cho tôi như một trợ giúp cho công việc kinh doanh hàng ngày của tôi. Tại thời điểm này nó in ra một cái gì đó giống như ...Làm cách nào để cập nhật hiển thị tiến trình trên ứng dụng dòng lệnh Perl?

0% 
25% 
50% 
75% 
Complete 

Nhưng tôi có thể nhớ kịch bản tôi đã sử dụng trong quá khứ mà không in tiến bộ trên cơ sở line-by-line, nhưng mà cập nhật sản lượng trên màn hình, có lẽ bằng cách di chuyển con trỏ trở lại và in quá mức những gì đã có.

Bất kỳ ai biết ma thuật là gì? Tính di động không quan trọng đối với tôi, kịch bản khá là dùng một lần.

Trả lời

6

Bên cạnh những câu trả lời khác, \ r sẽ quay trở lại vào đầu dòng hiện

2

Bạn sẽ có thể in một ký tự backspace '\ b' để di chuyển con trỏ trở lại để bạn có thể ghi đè lên những gì bạn đã in trước đó.

0

Tôi không biết điều này có hiệu quả trong Perl hay không, nhưng trong C/C++ bạn có thể sử dụng

\b
cho một không gian ẩn. Sử dụng một vài trong số đó, bạn có thể di chuyển con trỏ để ghi đè các giá trị cũ.

8

Bạn có thể sử dụng curses và thực hiện một thanh tiến trình tốt đẹp.

EDIT: Hoặc làm một cái gì đó như thế này:

print "#####         [ 10%]\r"; 
# Do something 
print "##########       [ 20%]\r"; 
# Do something else 
print "###############      [ 30%]\r"; 
# Do some more 
# ... 
# ... 
# ... 
print "##################################### [100%]\n"; 
print "Done.\n"; 
+0

Tôi nghĩ rằng trên Windows, bạn cần gọi 'binmode (STDOUT) ', trước khi' \ r' hoạt động theo cách bạn muốn. –

6

Nếu bạn đã bao giờ cần phải làm điều gì đó trong Perl, nó rất có khả năng rằng ai đó đã thực hiện nó và tải lên nó để CPAN. Xem một số mô-đun với "progress" in their name.

+0

Chẳng hạn như Thời gian :: Tiến trình hoạt động tốt trên Windows –

6

Bạn có thể quan tâm đến Smart Comments. Điều này có thể dễ dàng hơn so với mã hóa thanh tiến trình của riêng bạn.

+0

Cảm ơn bạn zoul, một mô-đun ;-) rất thông minh mà bạn đang đề xuất ở đây. –

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