【发布时间】:2023-04-05 00:12:01
【问题描述】:
我正在编写一个 Perl 脚本,它使用 system 来运行这样的外部命令管道:
system( "command1 | command2 | command3 > outfile" );
现在我想将所有这些命令中的 STDERR 捕获到一个文件中。这适用于 OS X:
system( "command1 2> error.log | command2 2> error.log | command3 2> error.log > outfile" );
但不是在 Windows 中,我得到错误:
“该进程无法访问该文件,因为它正被另一个进程使用”
有什么解决方法吗?我需要它是可移植的,所以如果可能的话,我想避免使用模块。 提前致谢。
【问题讨论】:
-
modules != 不可移植,一般来说
-
这很愚蠢。使用模块正是您需要的可移植性。
-
对不起,我的意思是它会被其他人使用,可能根本不熟悉Perl,所以我不想让他们下载除了main之外的任何东西分配。但是我可以使用 Perl 附带的任何东西(对不起,如果我不清楚)
-
除了安装脚本之外,您不应该要求他们做任何事情。只需将模块标记为脚本的依赖项。实际上,您可以使用核心模块 IPC::Open3 来完成。