我正在尝试创建一个顶级脚本,该脚本将调用大约35个以上的脚本,每个脚本都会寻求修改/创建文本文件。不是最好的做事方式,也不是最有趣的方法,但需要必须。
我使用'system'命令调用这些脚本中的每一个,但我想了解一些方法,以找出每个被调用的脚本创建/修改的文件。
最非侵入性的方法是在运行子脚本之前和之后简单地记下工作目录中所有文件的时间戳,但我担心这可能不够健壮。
所以我想知道在Perl中是否有一个模块/方法,我可以快速地将所有子脚本放入所有文件操作并将其作为某种返回值传递给调用脚本?
所有人都非常感谢,非常欢迎其他想法!
欢呼声
答案 0 :(得分:1)
与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库例程,而不是系统调用。)