Perl: выяснение того, какие файлы были созданы / изменены другим скриптом, вызываемым в текущем скрипте - PullRequest
0 голосов
/ 04 ноября 2011

Я пытаюсь создать скрипт верхнего уровня, который будет вызывать около 35+ других скриптов, каждый из которых будет пытаться изменить / создать текстовые файлы. Не лучший подход к выполнению дел и не самый веселый, но потребности должны.

Я вызываю каждый из этих сценариев с помощью команды 'system', но мне хотелось бы знать методы, чтобы узнать, какие файлы были созданы / изменены каждым вызванным сценарием.

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

Так что мне интересно, есть ли в Perl модуль / метод, который я могу быстро вставить во все вложенные сценарии, которые будут перехватывать все файловые операции и передавать их вызывающему сценарию в качестве некоторого возвращаемого значения?

Вся помощь очень ценится, и альтернативные идеи очень приветствуются!

ура

1 Ответ

1 голос
/ 04 ноября 2011

Как и a'r , я бы хотел использовать strace.Замените вызовы на system() вызовами на эту оболочку:

use File::Temp qw/tempfile/;

# ...

sub sys { # a wrapper for system()
  my ($fh, $filename) = tempfile();
  my $st = system("strace", "-o", $filename, "-eopen", @_);

  # report files used by the script -- customize as needed
  print STDERR "files accessed by $_[0]:\n";
  while (<$fh>) { print STDERR; }

  return $st;
}

Затем вы изменяете только родительский сценарий вместо всех дочерних сценариев.

Параметр -eopen на strace отфильтровывает только open звонки.Это также будет перехватывать вызовы к fopen (это подпрограмма библиотеки C, а не системный вызов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...