2009-04-17 24 views
7

Nếu tôi có ứng dụng perl này:Làm thế nào để tuôn ra đầu ra trong backticks Trong Perl?

print `someshellscript.sh`; 

rằng in loạt các công cụ và mất nhiều thời gian để hoàn thành, làm thế nào tôi có thể in rằng sản lượng ở giữa thực hiện các kịch bản shell?

Có vẻ như Perl sẽ chỉ in kết quả someshellscript.sh khi nó hoàn thành, có cách nào để làm cho đầu ra tuôn ra ở giữa thực hiện không?

Trả lời

16

gì có thể bạn muốn làm là một cái gì đó như thế này:

open(F, "someshellscript.sh|"); 
while (<F>) { 
    print; 
} 
close(F); 

Điều này chạy someshellscript.sh và mở một đường ống đọc đầu ra của nó. Vòng lặp while đọc từng dòng đầu ra được tạo bởi tập lệnh và in ra. Xem trang tài liệu open để biết thêm thông tin.

+4

Điều duy nhất tôi muốn bổ sung là thường tốt hơn khi sử dụng một tập tin từ vựng: mở $ fh của tôi, "someshellscript.sh |" hoặc chết $ !; – friedo

+0

tại sao điều đó tốt hơn? –

+3

@Nathan: (1) Bạn không thể vô tình che giấu một tập tin hiện có trong một phạm vi chứa; (2) Một tập tin từ vựng sẽ được tự động đóng lại khi tất cả các tham chiếu đến tập tin biến mất (thường là trên lối ra phạm vi). –

3

Vấn đề ở đây là thoát bằng backticks lưu trữ tập lệnh của bạn vào một chuỗi, sau đó bạn in. Vì lý do này, sẽ không có cách nào để "tuôn ra" với in ấn.

Sử dụng hệ thống() lệnh nên in ra liên tục, nhưng bạn sẽ không thể nắm bắt đầu ra:

system "someshellscript.sh"; 
+0

+1. EDIT: Tôi thêm một cuộc biểu tình nhanh chóng của hệ thống(), và xóa câu trả lời của riêng tôi mà là nếu không dự phòng. –

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