Я пишу Perl-скрипт для запуска внешней программы для каждого файла в каталоге. Эта программа конвертирует файлы из одного формата в другой. Вот сделка ...
Когда я запускаю программу из командной строки, все работает как надо:
computer.name % /path/program /inpath/input.in /outpath/output.out
converting: /inpath/input.in to /outpath/output.out
computer.name %
Вот код, который я написал для преобразования всех файлов в каталоге (указан в "file_list.txt"
):
#!/usr/bin/perl -w
use warnings;
use diagnostics;
use FileHandle;
use File::Copy;
# Set simulation parameters and directories
@test_dates = ("20110414");
$listfile = "file_list.txt";
$execname = "/path/program";
foreach $date (@test_dates)
{
# Set/make directories
$obs_file_dir = "inpath";
$pred_file_dir = "outpath";
mkdir "$pred_file_dir", 0755 unless -d "$pred_file_dir";
# Read input file names to array
$obs_file_list = $obs_file_dir . $listfile;
open(DIR, $obs_file_list) or die "Could not open file!";
@obs_files = <DIR>;
close(DIR);
# Convert and save files
foreach $file (@obs_files)
{
$file =~ s/(\*)//g;
$infile = $obs_file_dir . $file;
$outfile = $pred_file_dir . $file;
$outfile =~ s/in/out/g;
print $infile . "\n";
@arg_list = ($execname, $infile, $outfile);
system(@arg_list);
}
}
В выводе отображается следующая ошибка для каждого файла в списке:
computer.name % perl_script_name.pl
/inpath/input.in
converting: /inpath/input.in to /outpath/output.out
unable to find /inpath/input.in
stat status=-1
error while processing the product
Я проверил, что каждый файл находится в правильном месте, и понятия не имею, почему я получаю эту ошибку. Почему файлы не могут быть найдены? Когда я вручную передаю аргументы с помощью командной строки, никаких проблем. Когда я передаю аргументы через переменную через вызов system
, их невозможно найти, даже если путь и имена файлов указаны правильно.
Ваш совет с благодарностью!