从shell命令捕获输出而不[也]将其输出发送到stdout

时间:2013-04-03 13:33:42

标签: unix perl

我正在编写一个Perl程序来获取特定文件的修改时间。我尝试了以下方案:

  1. $time = system("stat -c %y temp.txt") - >这将$ time设置为“0”并将“2013-04-03 06:10:02.000000000 -0600”写入stdout。

  2. $time = `stat -c %y temp.txt` - >这将$ time设置为“2013-04-03 06:10:02.000000000 -0600”,并在stdout上显示相同的内容(“2013-04-03 06:10:02.000000000 -0600”)。

  3. $time = exec("stat -c %y temp.txt") - >这不会设置$ time,但会在stdout上打印“2013-04-03 06:10:02.000000000 -0600”。

  4. 由于这会一次又一次地使用相同类型的数据充斥我的stdout,我想摆脱它。可以请有人帮助我吗?

2 个答案:

答案 0 :(得分:0)

最好使用perl的内置stat函数:

@st = stat('temp.txt');

$st[9]现在包含上次修改时间的Unix纪元时间戳。你可以把它变成一个更有用的格式,比如这个

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($st[9]);

或者只是获得一个像这样的可打印字符串

$time = localtime($st[9]);

答案 1 :(得分:0)

反引号(以及相关的qx运算符或readpipe函数)不会在标准输出上写入任何输出;它们执行命令,捕获命令的输出并返回它(通常将其分配给某个变量)。所以

$time = `stat -c %y temp.txt`

将设置$time并且不向标准输出写入任何内容。命令可能会将某些内容写入标准错误,但是根据您描述的症状,它看起来并不像是发生了什么。