2015-07-06 129 views
1

我想從perl代碼執行python腳本。我想保存python輸出到數組並從中獲取一些數據。 Python腳本將在磁盤中進行一些搜索並找到我需要的文件。我將使用該輸出並在我的下一個腳本中使用它。如何從perl程序執行python代碼並使用python代碼的輸出

我寫了一些代碼

use strict; 
use warnings; 
use Getopt::Long; 
my $opt_section; 
my $opt_content; 
my $opt_ver; 
my $opt_help = 0; 

&GetOptions (
"help"   => \$opt_help, 
"section:s"  => \$opt_section, 
"content:s"  => \$opt_content, 
"ver:s"  => \$opt_ver, 
); 

if ($opt_help) { 
print "USAGE: file.pl -section <section> -content <content> -ver <ver> \n "; 

exit;} 
###################python script stats here ################ 
my $py = `/home/priya/library/bin/find.py -filter test~${opt_section}_priya_${opt_ver}` ; 


    print "output is $py \n"; 

代碼執行Python腳本和在終端屏幕上顯示輸出。但它不會將輸出存儲到$ py。你能幫我指導所有的輸出到一個數組或標量嗎?後來我想使用python輸出的每一行。

+0

'my @output = qx(... 2>&1)'(qx()與反引號相同) –

回答

1

它看起來好像find.py正在輸出到STDERR。嘗試使用以下命令將STDERR(文件句柄2)重定向到STDOUT(文件句柄1),並使用2>&1並使用結果行填充數組@python_output

my @python_output = qx(/home/priya/library/bin/find.py -filter test~${opt_section}_priya_${opt_ver} 2>&1); 

對於如何纏鬥在管道STDERR和STDOUT幾個例子見http://perldoc.perl.org/perlop.html#qx%2f_STRING_%2f