2010-07-14 9 views
6

में सिस्टम कमांड से आउटपुट के लिए फ़ाइलहेडल क्या पर्ल में निष्पादित सिस्टम कमांड के आउटपुट के लिए कोई फ़ाइल हैंडल/हैंडल है?पर्ल

उत्तर

1

हाँ, आप इस तरह एक पाइप का उपयोग कर सकते हैं:

open(my $pipe, "ls|") or die "Cannot open process: $!"; 
while (<$pipe>) { 
    print; 
} 

पाइप आपरेशन का पूरा विवरण के लिए perlipc अधिक जानकारी के लिए open के लिए दस्तावेज़ देखें, और।

+4

दो आर्ग 'open' पुराने और crufty (और संभावित खतरनाक) है। [इसके बजाय तीन-तर्क संस्करण का उपयोग करें] (http://www.modernperlbooks.com/mt/2010/04/three-arg-open-migrating-to-modern-perl.html) – Daenyth

12

यहाँ अपनी स्क्रिप्ट और अन्य आदेशों के बीच पाइप स्थापित करने, open की 3-तर्क प्रपत्र का उपयोग करने का एक उदाहरण है:

open(my $incoming_pipe, '-|', 'ls -l')    or die $!; 
open(my $outgoing_pipe, '|-', "grep -v '[02468]'") or die $!; 

my @listing = <$incoming_pipe>;   # Lines from output of ls -l 
print $outgoing_pipe "$_\n" for 1 .. 50; # 1 3 5 7 9 11 ...