Как я могу вывести ответ в текстовый файл и открыть текстовый файл, когда закончите - PullRequest
0 голосов
/ 26 мая 2019

Я хочу изменить сценарий Perl, чтобы сохранить результат в текстовом файле output.txt и открыть результаты output.txt, когда задача будет выполнена.

Я пытался использовать «использовать строгий; использовать предупреждения;»и другие методы, но я продолжаю получать сообщения об ошибках «Последняя ошибка была« Не удалось открыть output.txt »

#!/usr/bin/perl

use HTTP::Request;
use LWP::UserAgent;

system('cls');
system "color c";
print"\n";
print" |||||||||||||||||Robots scanner|||||||||||||||||||||";
print "\n";

print " Scan Your site Site\n\n Example: www.test.com \n\n-> ";


$site=<STDIN>;
chomp $site;

if($site !~ /http:\/\//) { $site = "http://$site/"; };

print "\n";

@path = ('robotx.txt','robots.txt','robot.txt','search',);


foreach $robots(@path){

  $url = $site.$robots;
  $req = HTTP::Request->new(GET=>$url);
  $useragent = LWP::UserAgent->new();

  $response = $useragent->request($req);
  my $filename = 'report.txt';
  open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
  if ($response->is_success){

    print  ">>>>>>Robots Found !!!>>>: $url\n";
    print $fh "out put has been generated by perl\n"; # THIS DOESN'T WORK THE report.txt is empty 
    print "done\n";

  }else{
    print "NotFound : $robots\n";
    print "done\n";
    # I want to open the file from windows explorer automatically here when its done 
    close $fh; 
  }

}

после запуска cmd от имени администратора, как вы видите, файл report.txt показывает пустой Iожидайте увидеть результат ответа

Я также хочу, чтобы perl открывал report.txt (не заходя в Windows Explorer и не открывая его вручную пользователем). Я хочу, чтобы он автоматически открывался, когда все готово, но я не былне в состоянии достичь этого.

Спасибо!

Ответы [ 2 ]

1 голос
/ 26 мая 2019

Кажется, вы всегда перезаписываете свой файл отчета.

Ваше открытие внутри цикла foreach. Цикл делается 4 раза. Вы получите только выходные данные последнего запуска, так как первые 3 файла будут перезаписаны последним.

Вы должны положить открытие и закрытие за пределами цикла.

Если вам нужен только первый результат, вы можете выйти из цикла, поместив оператор last в конце "then -части" вашей if.

0 голосов
/ 27 мая 2019

Попробуйте изменить open(my $fh, '>', $filename) на open(my $fh, '>>', $filename) (две стрелки вместо одной. Это добавит каждую новую запись вместо удаления последней.

Вот несколько ответов по открытию файлов Windows с помощью Perl:
Как запустить исполняемый файл с помощью Perl в Windows XP?

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