如何在PERL中已打开的文件中重定向控制台I/O

如何在PERL中已打开的文件中重定向控制台I/O,perl,redirect,printing,console,Perl,Redirect,Printing,Console,我在PERL中使用system()函数来执行命令。我想将这个函数的控制台I/O重定向到一个已经在PERL脚本中打开的文件(见下文)。我知道用PERL打开同一个文件进行重新定向是不可能的,但是我需要在PERL脚本内的单个文件中打印所有内容(包括PERL脚本打印语句和重新定向的输出)。谁能帮我一下吗 use strict; use warnings; open FPTR, ">Test.txt"; print FPTR "Executing Command1...\n"; system("T

我在PERL中使用system()函数来执行命令。我想将这个函数的控制台I/O重定向到一个已经在PERL脚本中打开的文件(见下文)。我知道用PERL打开同一个文件进行重新定向是不可能的,但是我需要在PERL脚本内的单个文件中打印所有内容(包括PERL脚本打印语句和重新定向的输出)。谁能帮我一下吗

use strict;
use warnings;

open FPTR, ">Test.txt";
print FPTR "Executing Command1...\n";
system("Time >>Test.txt");

print FPTR "Executing Command2...\n";
system("Date >>Test.txt");

close FPTR;
谢谢


可以将AND

STDOUT
重定向到已打开的文件句柄
FPTR
。退出
do
块,
STDOUT
由于
local
设置的动态范围而恢复

do {
  local *STDOUT = \*FPTR;
  print `date`;
};

局部变量将列出的变量修改为封闭块、文件或eval的局部变量


尝试使用backtick运算符执行命令并将其输出存储在变量中:
my$var=`time`

一旦存储了输出,您就可以简单地将其附加到文件中


希望这对您有所帮助。

谢谢您的帮助。我尝试了下面的代码,收到错误消息,“进程无法访问该文件,因为它正被另一个进程使用。”
open FPTR,“>Test.txt”;打印FPTR“正在执行命令1…\n”;do{local*STDOUT=*FPTR;system(“Date>>Test.txt”);};关闭FPTR是正确的。我用的是win-7。没问题,很高兴我能帮助你。