无法使用print写入文件

时间:2010-07-23 02:41:04

标签: perl

#!/usr/bin/perl

use strict;
use warnings;

open(my $vmstat, "/usr/bin/vmstat 1 2>&1 |");
open(my $foo, ">", "foo.txt") or die "can't open it for write";

while(<$vmstat>) {
   print "get ouput from vmstat and print it to foo.txt ...\n";
   print $foo $_;
}

当我运行上面的代码时,没有发生任何错误。但是在按ctrl-c退出后,foo.txt中没有任何内容。你们任何人都可以告诉我为什么会这样吗?提前谢谢。

3 个答案:

答案 0 :(得分:4)

也许输出正在被缓冲,你没有足够的耐心。试试这段额外的代码:

open(my $foo, ">foo.txt") or die "can't open it for write";
select $foo; $| = 1; select STDOUT;

答案 1 :(得分:1)

这一行有几个问题:

opne(my $foo, ">" "foo.txt") or die "can't open it for write";

首先,open拼写错误。此外,你有两个彼此相邻的字符串,没有任何东西将它们分开。试试这个:

open(my $foo, ">foo.txt") or die "can't open it for write";

此外,如果这不能解决您的问题,请仔细检查您(或运行的用户)是否具有对文件foo.txt的写访问权。

答案 2 :(得分:0)

你有一个错字:“opne”而不是“open”。

另外,要从进程中读取,必须在最后放置一个管道:

#!/usr/bin/perl

use strict;
use warnings;

open(my $vmstat, "/usr/bin/vmstat 1 5 2>&1 |") or die "error";
open(my $foo, ">foo.txt") or die "can't open it for write";

while(<$vmstat>) {
    print "get ouput from vmstat and print it to foo.txt ...\n";
    print $foo $_;
}