невозможно записать в файл с помощью печати - PullRequest
3 голосов
/ 23 июля 2010
#!/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 $_;
}

когда я запускаю приведенный выше код, ничего плохого не происходит, но после того, как я нажимаю ctr-c, чтобы выйти, ничего в foo.txt.кто-нибудь из вас может сказать мне, почему это происходит?заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 23 июля 2010

Возможно, вывод буферизуется, а вы недостаточно терпеливы.Попробуйте эту дополнительную строку кода:

open(my $foo, ">foo.txt") or die "can't open it for write";
select $foo; $| = 1; select STDOUT;
1 голос
/ 23 июля 2010

Есть несколько проблем с этой строкой:

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.

0 голосов
/ 23 июля 2010

У вас есть опечатка: "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 $_;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...