#!/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中没有任何内容。你们任何人都可以告诉我为什么会这样吗?提前谢谢。
答案 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 $_;
}