我在solaris上运行此脚本。我试图将实际,用户和系统时间写入文件,每个文件都在一个单独的行上。但是,此代码将它们与一堆未知字符框一起写在同一行上。我怎样才能在每个单独的路线上获得每一次?
#!/usr/local/bin/perl -w
use strict;
use warnings;
my $command = "time echo 'hi' 2>&1 | tee -a runtimes.log";
system ($command);
答案 0 :(得分:0)
Solaris标准行分隔符为\n
,因此您的代码似乎正确。另请看here。
您的问题可能与您用来查看文件的文本编辑器有关...
答案 1 :(得分:0)
两件事:
open
和system
命令的输出。试试这个:
#!/usr/bin/env perl
use strict;
use warnings; #No need for -w when using this
my $command = "time ls 2>&1 | tee -a runtimes.log";
open (FILE, '>>runtimes.log')
or die qq(Can't open "runtimes.log for writing\n);
my $error = system ($command);
if ($error) {
die qq(Error in executing command "$command": $?\n);
}
print "\n";
close FILE;
exit 0;
答案 2 :(得分:0)
如果使用perl代码(times
或POSIX::times
)来获取系统/用户时间,您可能会获得更好的结果以及更易维护的代码。
$command="ls -lR";
@before{real,user,system,chuser,chsystem}=(time(),times());
system $command;
@after{real,user,system,chuser,chsystem}=(time(),times());
print "real @{[ $after{real}-$before{real} ]}\n";
print "user @{[ $after{chuser}-$before{chuser} ]}\n";
print "sys @{[ $after{chsystem}-$before{chsystem} ]}\n";
或POSIX版本:
use POSIX qw(times sysconf);
$clocks_per_second=POSIX::sysconf( &POSIX::_SC_CLK_TCK );
$command="ls -lR";
@before{real,user,system,chuser,chsystem}=(POSIX::times());
system $command;
@after{real,user,system,chuser,chsystem}=(POSIX::times());
printf "real %2.2f\n", ($after{real}-$before{real})/$clocks_per_second;
printf "user %2.2f\n", ($after{chuser}-$before{chuser})/$clocks_per_second;
printf "sys %2.2f\n", ($after{chsystem}-$before{chsystem})/$clocks_per_second;