में आदेश से उत्पादन पढ़ना मैं इस तरह एक सरणी — में एक आदेश के उत्पादन में प्राप्त करना चाहते हैं:पर्ल सरणी
my @output = `$cmd`;
लेकिन ऐसा लगता है कि आदेश से उत्पादन @output
सरणी में जाना नहीं है।
कोई विचार जहां यह जाता है?
में आदेश से उत्पादन पढ़ना मैं इस तरह एक सरणी — में एक आदेश के उत्पादन में प्राप्त करना चाहते हैं:पर्ल सरणी
my @output = `$cmd`;
लेकिन ऐसा लगता है कि आदेश से उत्पादन @output
सरणी में जाना नहीं है।
कोई विचार जहां यह जाता है?
सक्षम करें स्वत: त्रुटि जाँच:
require IPC::System::Simple;
use autodie qw(:all);
⋮
my @output = `$cmd`;
(मानक) उत्पादन है कि सरणी के लिए जाना है:
[email protected]:listing # cat > demo.pl
#!/usr/bin/perl
use strict;
use warnings;
use v5.14;
use Data::Dump qw/ddx/;
my @output = `ls -lh`;
ddx \@output;
[email protected]:listing # touch a b c d
[email protected]:listing # perl demo.pl
# demo.pl:8: [
# "total 8\n",
# "-rw-r--r-- 1 david staff 0B 5 Jun 12:15 a\n",
# "-rw-r--r-- 1 david staff 0B 5 Jun 12:15 b\n",
# "-rw-r--r-- 1 david staff 0B 5 Jun 12:15 c\n",
# "-rw-r--r-- 1 david staff 0B 5 Jun 12:15 d\n",
# "-rw-r--r-- 1 david staff 115B 5 Jun 12:15 demo.pl\n",
# ]
यह सरल स्क्रिप्ट मेरे लिए काम करता है:
#!/usr/bin/env perl
use strict;
use warnings;
my $cmd = "ls";
my @output = `$cmd`;
chomp @output;
foreach my $line (@output)
{
print "<<$line>>\n";
}
यह उत्पादन किया आउटपुट (ट्रिपल डॉट्स को छोड़कर):
$ perl xx.pl
<<args>>
<<args.c>>
<<args.dSYM>>
<<atob.c>>
<<bp.pl>>
...
<<schwartz.pl>>
<<timer.c>>
<<timer.h>>
<<utf8reader.c>>
<<xx.pl>>
$
कमांड का आउटपुट लाइन सीमाओं पर विभाजित है (डिफ़ॉल्ट रूप से, सूची संदर्भ में)। chomp
सरणी तत्वों में नई पंक्तियों को हटा देता है।
आउटपुट त्रुटि नहीं है मुझे नहीं पता कि यह वास्तव में क्या है –
फिर आपको हमारे आदेश को और अधिक स्पष्ट रूप से पहचानने की आवश्यकता हो सकती है। मैंने '$ cmd' असाइनमेंट दिखाया; आपने यह नहीं दिखाया है कि आप जिस आदेश में निष्पादित कर रहे हैं उसमें क्या है। क्या आपने यह देखने के लिए आदेश दिया है कि क्या आपको कुछ उपयोगी वापस मिल रहा है या नहीं, 'ls' या' pwd' या 'echo हैलो वर्ल्ड' का उपयोग करने का प्रयास किया है? आपने यह भी नहीं दिखाया है कि आप सरणी को कैसे संसाधित कर रहे हैं। –
क्या आप वाकई अपना आदेश STDOUT को लिखते हैं? यदि यह एसटीडीईआरआर को लिखता है तो बैकटिक्स आपकी कॉल में '2> और 1' को शामिल किए बिना कैप्चर नहीं करेगा। – dgw
आप कैसे निर्धारित कर रहे हैं कि आउटपुट सरणी में नहीं जाता है? –