मैं एक पर्ल स्क्रिप्ट से एक एसवीएन टैग अस्तित्व की जांच करने की कोशिश कर रहा हूं। इसलिए मैं svn info $url
पर कॉल करने का प्रयास करता हूं, निकास कोड पढ़ता हूं और मानक आउटपुट और मानक त्रुटि स्ट्रीम दबाता हूं। हालांकि, मैं इस सुंदर ढंग से करने के लिए (वहाँ शायद बेहतर तरीके एक टैग के बारे में पूछने के लिए SVN हैं, लेकिन उस समय यहाँ नहीं है) संघर्ष:पर्ल में आउटपुट और निकास कोड दोनों को कैप्चर करते समय मैं बाहरी स्क्रिप्ट कैसे निष्पादित करूं?
my $output = `svn info $url/tags/$tag`;
यह आउटपुट को दबा जबकि यह $output
में डाल। बाहर निकलें कोड खो गया है।
my $output = `svn info $url/tags/$tag 2>&1`;
यह दोनों STDERR और STDOUT को घटाती है तथा उन दोनों $output
में डालता है। बाहर निकलें कोड फिर से खो गया है।
my $exitcode = system("svn", "info", "$url/tags/$tag");
यह निकास कोड को पकड़ता है, लेकिन वास्तविक आउटपुट और त्रुटि स्ट्रीम उपयोगकर्ता को दिखाई देती है।
open(STDERR, q{>}, "/dev/null");
open my $fh, q{>}, "/dev/null";
select($fh);
if (system("svn", "info", "$url/tags/$tag") != 0) {
select(STDOUT);
print ("Tag doesn't exist!");
do_something_with_exit();
}
select(STDOUT);
print "Exit code: $exitcode";
यह STDOUT और STDERR को मारता है और बाहर निकलने के कोड पकड़ता है, लेकिन यह बदसूरत है क्योंकि मैं STDOUT मूल पर बदलने में याद करना होगा।
तो, क्या कोई और सुरुचिपूर्ण समाधान है?
बाहर निकलें कोड '$ में उच्च बाइट है?', ताकि आप '$ की ज़रूरत है? >> 8'। –
@brian: इसे इंगित करने के लिए धन्यवाद। – bhups
यह आपके उत्तर को संपादित करने के लिए थोड़ी सी बात थी। :) –