में आउटपुट से लॉग इन करना मेरे पास एक प्रोग्राम है जो अन्य प्रोग्रामों का एक सेट चलाने और लॉगिंग उद्देश्यों के लिए अपना आउटपुट एकत्र करने वाला है। जब तक मानक आउटपुट आउटपुट होता है तब तक सब कुछ ठीक काम कर रहा है।पर्ल
जो मुझे मेरे दो समस्याओं को जन्म देता:
मैं कैसे कैप्चर कर सकते हैं दोनों
STDIN
और एक फ़ाइल में किसी अन्य प्रोग्राम केSTDERR
?अगर कोई कार्यक्रम लाइन पर अटक जाएगा (केवल
STDERR
करने के लिए या उत्पादन) सब पर कोई उत्पादन है:while (<$input>)
मैं किसी दूसरे से संभव उत्पादन के लिए कार्यक्रम इंतजार कर सकते हैं अनिश्चित रन टाइम का कार्यक्रम, और तब भी जारी रहता है जब कार्यक्रम निष्पादन समाप्त होने तक कोई आउटपुट न हो।
यहाँ कोड के उस अनुभाग है
my $pid = open (my $input, '-|', "$prog $args")
or push @errors, "A failute has occurred in $prog $args";
if(not @errors){
while (<$input>){ #POSSIBLE LOCATION FOR HANG UP IF NO PRINTING IS DONE
if($input =~ /^END\n$/){
last;
}
print $fh $_;
}
}
else{
print $fh "An error has occurred with executing \"$prog $args\"";
}
ध्यान दें: $fh
मेरी फाइल मेरी लॉग फ़ाइल पर लिखने के लिए इस्तेमाल किया हैंडलर है, और @errors
आंतरिक रूप से मेरा कार्यक्रम में त्रुटियों की रिपोर्टिंग के लिए प्रयोग किया जाता है।
संपादित करें: एक समस्या यह है मैं Proc::Reliable मार्ग की कोशिश कर के साथ अनुभव है कि यह STDOUT
और STDERR
पर प्रभाव के बाद लगता है, और मैं एक कॉल के बाद उन को चलाने के लिए तय करने के लिए की आवश्यकता होगी। इससे मेरे कोड में एक और समस्या आती है। मैं समानांतर में चल रहा हूं और STDOUT
और STDERR
पर सभी परिवर्तन (कम से कम विंडोज का उपयोग करके) पर सभी परिवर्तनों को प्रभावित करता है।
IO::CaptureOutput मेरे लिए एक ही मुद्दा है, लेकिन यह होने के लिए आंतरिक रूप से STDOUT
और STDERR
jumbling सही करने के लिए कोशिश करता है और निम्न त्रुटि का कारण बनता है: Proc::Reliable पर
Couldn't remove temp file 'C:\Users\SBLAKE~1\AppData\Local\Temp\m8E3pUGfOS' - Permission denied at C:/Perl/site/lib/IO/CaptureOutput.pm line 82
संभावित डुप्लिकेट [आप पर्ल में एक बार में stderr, stdout, और निकास कोड कैप्चर कैसे करते हैं?] (Http://stackoverflow.com/questions/109124/how-do-you-capture-stderr- stdout और निकास-कोड-सब-एट-एक बार में पर्ल) – daxim