Chúng tôi đang cố gắng tìm ra cách để chạy một ứng dụng java từ bên trong một kịch bản perl nhưng vẫn có thể đọc định kỳ từ STDOUT của ứng dụng java.Làm cách nào để xem STDOUT của chương trình đang chạy từ chương trình perl được gọi là chương trình này?
print "running dcmrcv.bat\n";
open my $fh_dcmrcv, "-|", 'z:\apps\dcm4che\dcm4che-2.0.26\bin\dcmrcv.bat \
DCMRCV:11112 -dest z:\dcmrcv -journal z:\dcmrcv',
or die "could not execute dcmrcv: $!";
print "dcmrcv.bat started\n";
Chúng tôi muốn để có thể đọc từ filehandle, $ fh_dmcrcv, cứ mỗi vài phút hoặc có thể bằng cách thiết lập một AnyEvent io kích hoạt khi có hoạt động trên filehandle.
Tuy nhiên, khi tôi cố gắng và đọc từ filehandle, nó ngăn chặn nếu tôi sử dụng một cái gì đó như thế này:
foreach my $line (<$fh_dmcrcv>) {
print $line;
}
Chúng tôi đã thử một số phương pháp tiếp cận, không nghĩ rằng chúng ta có thể sử dụng File :: Tail, vì có vẻ như mô-đun đó cần một tệp thực sự. Vấn đề có vẻ là $ fh_dcmrcv đang chặn chúng tôi khi chúng tôi đọc từ đó, không thực sự chắc chắn về cách tiếp cận chính xác về cách đạt được những gì chúng tôi muốn.
EDIT # 1
Khi chúng tôi chạy script perl, chúng ta đang nhìn thấy đầu ra như thế này:
Z:\projects\demo_2>process_files.pl
running dcmrcv.bat
dcmrcv.bat started
Start Server listening on port 11112
11:55:13,495 INFO - Start listening on 0.0.0.0/0.0.0.0:11112
Các kịch bản, process_files.pl được phát ra những thông điệp .:
running dcmrcv.bat
dcmrcv.bat started
Thông điệp. từ chương trình java là: Bắt đầu máy chủ nghe trên cổng 11112 11: 55: 13,495 THÔNG TIN - Bắt đầu nghe trên 0.0.0.0/0.0.0.0:11112
Trong trường hợp này, chúng tôi đang lặp lại những điều đó chỉ vì mục đích của câu hỏi này, thực sự chúng tôi muốn phân tích định kỳ cho một số thông điệp nhất định. và không bao giờ lặp lại bất kỳ thứ gì trong số chúng.
Bất kỳ cái nhìn sâu sắc được đánh giá cao,
-Sam
Bạn có thể ghi đầu ra của ứng dụng vào một tệp (tạm thời) và sau đó sử dụng 'Tệp :: đuôi'? – mob
Chúng tôi đang cố tránh phương pháp đó. Chúng tôi không muốn phải quản lý tệp này về việc phải xoay hoặc cắt tệp. – slm
Bạn đã thử sử dụng fctrl để đặt bộ mô tả thành O_NONBLOCK? – frankc