2016-12-01 5 views
0

Я хотел бы несколько раз запустить скрипт perl и добавить выходные файлы в файл.Perl - способ запуска скрипта несколько раз и добавления выходных файлов

Предположим, у меня есть скрипт perl (sparc_sub.pl), который генерирует выходной файл sparc_sub.output. Я хотел бы запускать его несколько раз. При каждом запуске он перенастраивает один и тот же выходной файл (sparc_sub.output), но содержимое отличается.

Я знаю, что «>>» является знаком, если я хотел бы добавить в конец файла, поэтому я использовал знак для открытия выходных файлов в цикле. Однако выходной файл sparc_sub.output всегда сохраняет результат последнего прогона. (не прилагается)

Любая помощь приветствуется.

sparc_top.pl

use strict; 
use Math::BigInt; 
use 5.010; 
use List::Util qw(sum); 

my $s; 
my $done=3; 
my $script="sparc_sub.pl"; 
my @output; 
my $filename ='sparc_sub.output'; 

for ($s=0; $s < $done; $s++) { 
    system('perl',$script)==0 or die "failed to execute $script: \$?=$?"; 
    open(my $fh, '>>', $filename) or die "Could not open file '$filename' $!"; 
    close $fh; 
} 
+1

Похоже, вы открываете файл и сразу же закрываете его, ничего не пишите. Вам нужно изменить код, который фактически записывается в файл! –

+0

обратите внимание, что перед '' циклом 'for()' вы должны поместить свой 'open' файла, а после него -' закрыть '. Это открывает файл один раз, а не на каждой итерации цикла. – stevieb

+0

Вы должны показать нам часть 'sparc_sub.pl', которая открывает файл ... –

ответ

3

Вы открыли файл, а затем сразу же закрыл его, даже писать ничего к нему.

open(my $fh, '>>', $filename) or die "Could not open file '$filename' $!"; 
print $fh "this data goes to file"; 
close $fh; 

У меня есть сценарий PERL sparc_sub.pl, который генерирует выходной файл, sparc_sub.output

Так с каждым запустить тот же файл будет создан. Я думаю, вы хотите создать новый файл, который будет продолжать добавлять данные из sparc_sub.output. Если это так, то делайте ниже.

open(my $fh2, '>>', 'all_outputs') or die "Could not open file 'all_outputs' $!"; 

for ($s=0; $s < $done; $s++) { 
    system('perl',$script)==0 or die "failed to execute $script: \$?=$?"; 
    #sparc_sub.output has been generated. 
    #Now take the data from this file and append it to a final file 
    open(my $fh, '<', 'sparc_sub.output') or die "Could not open file '$filename' $!"; 
    my @data = <$fh>; 
    print $fh2 @data; 
} 

Теперь all_outputs файл содержит данные из sparc_sub.output файла, который был сгенерирован несколько раз в цикле.

+0

Хотя это правда, похоже, что дочерний скрипт выполняет операции с файлами, поэтому реальный ответ, вероятно, должен измениться в режиме добавления. –

+0

Я бы порекомендовал в этом случае «открыть» дескриптора записи вне цикла 'for()' вместо открытия/закрытия на каждой итерации. – stevieb

+2

@stevieb: Хороший момент, сделано. –

Смежные вопросы