हम यह पता लगाने की कोशिश कर रहे हैं कि एक जावा एप्लिकेशन को एक पर्ल स्क्रिप्ट के भीतर से कैसे चलाया जाए लेकिन फिर भी जावा ऐप के STDOUT से समय-समय पर पढ़ सकें।मैं एक पर्ल प्रोग्राम से चल रहे प्रोग्राम के STDOUT को कैसे देख सकता हूं जिसे इसे कहा जाता है?
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";
हम filehandle, $ fh_dmcrcv से पढ़ने में सक्षम होना चाहते थे, हर कुछ मिनटों या शायद ट्रिगर कब एक AnyEvent की स्थापना जब वहाँ filehandle पर गतिविधि है द्वारा।
हालांकि, जब मैं कोशिश करते हैं और filehandle से पढ़ें, यह ब्लॉक अगर मैं कुछ इस तरह का उपयोग करें:
foreach my $line (<$fh_dmcrcv>) {
print $line;
}
हम कई दृष्टिकोण की कोशिश की है, नहीं लगता है कि हम फ़ाइल :: पूंछ का उपयोग कर सकते है, चूंकि ऐसा लगता है कि मॉड्यूल को एक वास्तविक फ़ाइल की आवश्यकता है। ऐसा लगता है कि जब हम इसे पढ़ते हैं तो $ fh_dcmrcv हमें अवरुद्ध कर रहा है, हम वास्तव में सही दृष्टिकोण के बारे में सुनिश्चित नहीं हैं कि हम क्या चाहते हैं।
संपादित करें # इस तरह 1
हम अपने पर्ल स्क्रिप्ट चलाने हम देख रहे हैं उत्पादन: msgs
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
स्क्रिप्ट, process_files.pl उत्सर्जित करती है .:
running dcmrcv.bat
dcmrcv.bat started
संदेश। जावा कार्यक्रम से कर रहे हैं: प्रारंभ सर्वर पोर्ट पर ध्यान 11112 11: 55: 13,495 जानकारी - 0.0.0.0/0.0.0.0:11112
पर सुन इस मामले में हम सिर्फ खातिर उन बाहर गूंज रहे हैं शुरू इस सवाल के, वास्तव में हम कुछ संदेशों के लिए समय-समय पर विश्लेषण करना चाहते हैं। और उनमें से किसी को भी गूंज नहीं।
किसी भी अंतर्दृष्टि की सराहना की है,
-Sam
क्या आप एप्लिकेशन आउटपुट को (अस्थायी) फ़ाइल में लिख सकते हैं, और फिर 'फ़ाइल :: टेल' का उपयोग कर सकते हैं? – mob
हम उस दृष्टिकोण से बचने की कोशिश कर रहे हैं। हम इसे घुमाने या इसे ट्रिम करने के संदर्भ में इस फ़ाइल को प्रबंधित नहीं करना चाहते हैं। – slm
क्या आपने वर्णनकर्ता को O_NONBLOCK पर सेट करने के लिए fctrl का उपयोग करने का प्रयास किया है? – frankc