2013-07-29 5 views
2

Я использую скрипт CGI для своего сайта. И у меня проблема с открытием динамически сгенерированного файла. Вот код:Перл открывает динамически сгенерированные файлы

#!/usr/bin/perl 
my @output = `/export/es_share/Zhou/./notification_finder.sh range $date $time $range $ulh TestProd1 $actionname`; 
my $filen = $output[0]; 
open(my $result, "<", $filen) or die "Can't open $filen - $!"; 
Do something with the file... 

Всегда выходит из строя, с выходом:

Can't open /var/tmp/notification-finder-1375086676-658183725.tmp - 
No such file or directory at /var/www/cgi-bin/appsupport/logapp_test/perltest.cgi line X. 

Хотя, как это удается:

#!/usr/bin/perl 
open(my $result, "<", /var/tmp/notification-finder-1375086676-658183725.tmp) or die "Can't open $filen - $!"; 
Do something with the file... 

Я также проверил, был ли это проблема асинхронного выполнения проблемы backticks, но из моих исследований в stackoverflow это, похоже, не проблема. Я также попытался это:

#!/usr/bin/perl 
my @output = `/export/es_share/Zhou/./notification_finder.sh range $date $time $range $ulh TestProd1 $actionname`; 
sleep(10); 
my $filen = $output[0]; 
open(my $result, "<", $filen) or die "Can't open $filen - $!"; 
Do something with the file... 

Я нашел это similar issue here, но я, кажется, не имеют те же проблемы, что и Аскер ... Спасибо за чтение этого далеко.

+1

Может быть, вы можете использовать что-то вроде [ 'File :: Temp'] (http://search.cpan.org/perldoc?File%3A%3ATemp). – TLP

+0

@TLP может, пожалуйста, уточнить немного больше? Я новичок в Perl. :) – Juto

+0

Нет, боюсь, я никогда не использовал этот модуль. Я не уверен, что вы можете использовать его в этом контексте, передав имя временного файла системной команде. – TLP

ответ

4

Ошибка указывает на наличие новой строки в конце $filen, в противном случае было бы:

Can't open /var/tmp/notification-finder-1375086676-658183725.tmp - No such file or directory at /var/www/cgi-bin/appsupport/logapp_test/perltest.cgi line XXXXXXXXX. 

Удалить его:

chomp $filen; 
+0

Просто БОЛЬШАЯ диагностика! – jm666

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