如何将响应输出到文本文件并完成后打开文本文件

时间:2019-05-26 13:24:15

标签: perl file-io

我想修改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; 
  }

}

以Admin身份运行cmd后,您可以看到report.txt文件显示为空 我希望看到响应的结果

我还希望perl打开report.txt(无需进入Windows资源管理器并由用户手动打开它),我希望它在完成后自动打开,但我无法实现。

谢谢!

2 个答案:

答案 0 :(得分:1)

似乎您总是在覆盖报告文件。

您的打开位置位于foreach循环内。循环执行了4次。您只会收到最后一次运行的输出,因为前三个文件的创建将被最后一个文件覆盖。

您应该将打开和关闭置于循环之外。

如果只需要第一个结果,则可以通过在last的“ then-部分”末尾放置if语句来退出循环。

答案 1 :(得分:0)

尝试将open(my $fh, '>', $filename)更改为open(my $fh, '>>', $filename)(用两个箭头代替一个。这将添加每个新条目,而不是删除最后一个。

以下是使用Perl打开Windows文件的一些答案:
How to run an executable file using Perl on Windows XP?