Вы всегда можете использовать следующий процесс, чтобы сбросить выход прямо в файл.
1) DUP дескриптор файла системы STDOUT
, 2) open STDOUT
, 3) система, 4) скопировать слот ввода-вывода обратно в 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