хранение ошибок: binmode () в закрытой файловой ручке $ out в ... print () в закрытой файловой ручке $ out - PullRequest
0 голосов
/ 31 марта 2012

см. обновление в конце публикации intail

  • Ну, я немного сбит с толку, должен признать ... ;-) Будучи новичком в Perl, Perl-код всегда выглядит немного абракадаба ....

мне нужно иметь несколько миниатюр с веб-сайтов, но я попытался использовать wget - но это не работает для меня, так как мне нужны некоторые функции рендеринга, что нужно: у меня есть список из 2500 URL, по одному в каждой строке, сохраненный в файле. Затем я хочу сценарий - см. Ниже - чтобы открыть файл, прочитать строку, затем получить веб-сайт и сохранить изображение в виде небольшого эскиза. Ну, так как у меня есть несколько веб-сайтов (2500), я должен определиться с именами результатов.

http://www.unifr.ch/sfm
http://www.zug.phz.ch
http://www.schwyz.phz.ch
http://www.luzern.phz.ch
http://www.schwyz.phz.ch
http://www.phvs.ch
http://www.phtg.ch
http://www.phsg.ch
http://www.phsh.ch
http://www.phr.ch
http://www.hepfr.ch/
http://www.phbern.ch

Пока так хорошо, я думаю, я попробую что-то вроде этого

  #!/usr/bin/perl
  use strict;
  use warnings;

  use WWW::Mechanize::Firefox;

  my $mech = new WWW::Mechanize::Firefox();

  open my $urls, '<', 'urls.txt' or die $!;

  while (<$urls>) {
    chomp;
    next unless /^http/i;
    print "$_\n";
    $mech->get($_);
    my $png = $mech->content_as_png;
    my $name = $_;
    $name =~ s#^http://##i;
    $name =~ s#/##g;
    $name =~ s/\s+\z//;
    $name =~ s/\A\s+//;
    $name =~ s/^www\.//;
    $name .= ".png";
  open(my $out, '>', "/images/$name");
  binmode $out;
    print $out $png;
    close $out;
    sleep 5;
  }

сейчас я получаю следующие результаты .... посмотрим, что получится ... и насколько я вижу - в папке "images" нет изображений, хранящихся

почему бы и нет!?

rtin@linux-wyee:~> cd perl
martin@linux-wyee:~/perl> perl test_8.pl
http://www.unifr.ch/sfm
binmode() on closed filehandle $out at test_8.pl line 25, <$urls> line 2.
print() on closed filehandle $out at test_8.pl line 26, <$urls> line 2.
http://www.zug.phz.ch
binmode() on closed filehandle $out at test_8.pl line 25, <$urls> line 3.
print() on closed filehandle $out at test_8.pl line 26, <$urls> line 3.
http://www.schwyz.phz.ch
binmode() on closed filehandle $out at test_8.pl line 25, <$urls> line 4.
print() on closed filehandle $out at test_8.pl line 26, <$urls> line 4.
http://www.luzern.phz.ch
binmode() on closed filehandle $out at test_8.pl line 25, <$urls> line 5.
print() on closed filehandle $out at test_8.pl line 26, <$urls> line 5.
http://www.schwyz.phz.ch
binmode() on closed filehandle $out at test_8.pl line 25, <$urls> line 6.
print() on closed filehandle $out at test_8.pl line 26, <$urls> line 6.
http://www.phvs.ch
binmode() on closed filehandle $out at test_8.pl line 25, <$urls> line 14.
print() on closed filehandle $out at test_8.pl line 26, <$urls> line 14.                                                                                        http://www.pfh-gr.ch                                                                       Got status code 500 at test_8.pl line 15                                                                                         martin@linux-wyee:~/perl>                                                                               

что выход хочет мне сказать ... что я могу сделать сейчас??

обновление

привет, мой дорогой

спасибо за ответ - угадайте, что у меня проблема с разрешением здесь ...

ну, у меня есть это ...

  #!/usr/bin/perl
  use strict;
  use warnings;

  use WWW::Mechanize::Firefox;

  my $mech = new WWW::Mechanize::Firefox();

  open my $urls, '<', 'urls.txt' or die $!;

  while (<$urls>) {
    chomp;
    next unless /^http/i;
    print "$_\n";
    $mech->get($_);
    my $png = $mech->content_as_png;
    my $name = $_;
    $name =~ s#^http://##i;
    $name =~ s#/##g;
    $name =~ s/\s+\z//;
    $name =~ s/\A\s+//;
    $name =~ s/^www\.//;
    $name .= ".png";
  open(my $out, '>', "/images $name")or die $!;
  binmode $out;
    print $out $png;
    close $out;
    sleep 5;
  }

хорошо, это работает - но все, что я могу получить, - это сохранение в каталоге, где находится test_8.pl

думаю, это проблема с разрешениями.

что я могу сделать.

Могу ли я поместить каталог с изображениями где-нибудь вне папки perl ..? возможно, я создал либо

perl-каталог или каталог-изображения со специальным корневым разрешением.

что я сделал для решения проблем до сих пор было

a- проверьте права доступа к папкам - Perl , Perl / изображения

b.- запуск скрипта в командной строке от имени пользователя root.

Ну, все, что я могу получить, это результаты, которые хранятся в папке, ...

linux-wyee:/home/martin/perl_dev/perl # ls
.directory                    images                    module_test         pfh-gr.ch.png  phsg.ch.png          phtg.ch.png  schwyz.phz.ch.png  test_4.pl  test_8.pl        urls.txt
heilpaedagogik.phbern.ch.png  luzern.phz.ch.png         module_test.pl      phbern.ch.png  phsh.ch.png          phvs.ch.png  test_2.pl          test_6.pl  test_8.pl~       zug.phz.ch.png
hepfr.ch.png                  ma-shp.luzern.phz.ch.png  open-local-file.pl  phr.ch.png     ph-solothurn.ch.png  .png         test_3.pl          test_7.pl  unifr.chsfm.png
linux-wyee:/home/martin/perl_dev/perl # 

папка с изображениями пуста

что я могу сделать

Должен ли я создать папку с изображениями вне директории perl

как назвать строку-путь к ней ..?!

Дорогой приятель - мы там все - я почти уверен - я думаю, что это только вопрос разрешения. Но как это решить!?

возможно, мне придется снова создать все тестовые файлы в новом каталоге. не как root, а как обычный пользователь !? Что ты скажешь!?

1 Ответ

5 голосов
/ 31 марта 2012

Вы не смогли открыть файл для записи. Ваш путь - / images , и у вас, вероятно, нет прав для этого каталога (если он вообще существует). Всегда проверяйте возвращаемое значение ваших вызовов на open , как вы это делали в первом open .

На вашем месте я бы не использовал / images . Я бы загрузил все в каталог, которым я управляю, и не загромождает стандартные макеты каталогов. Вы почти никогда не должны создавать новые каталоги под / , если вы не занимаетесь системным администрированием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...