您可以隨時使用以下過程來轉儲直接輸出到文件中。
1)DUP系統STDOUT
文件描述符,2)open STDOUT
,3)系統,4)複製IO插槽回STDOUT
:
open(my $save_stdout, '>&1'); # dup the file
open(STDOUT, '>', '/path/to/output/glop'); # open STDOUT
system(qw<cmd.exe /C dir>); # system (on windows)
*::STDOUT = $save_stdout; # overwrite STDOUT{IO}
print "Back to STDOUT!"; # this should show up in output
但qx//
可能是你在找什麼。
參考:perlopentut
當然,這可以概括:
sub command_to_file {
my $arg = shift;
my ($command, $rdir, $file) = $arg =~ /(.*?)\s*(>{1,2})\s*([^>]+)$/;
unless ($command) {
$command = $arg;
$arg = shift;
($rdir, $file) = $arg =~ /\s*(>{1,2})\s*([^>]*)$/;
if (!$rdir) {
($rdir, $file) = ('>', $arg);
}
elsif (!$file) {
$file = shift;
}
}
open(my $save_stdout, '>&1');
open(STDOUT, $rdir, $file);
print $command, "\n\n";
system(split /\s+/, $command);
*::STDOUT = $save_stdout;
return;
}
你的問題是混亂的。你想要輸出原始命令「p4 change -o 3456789」嗎?還是想要別的東西?如果你想要原始命令的輸出,不要使用'system'。相反,使用反引號。 – sholsapp 2010-08-04 18:42:10