我有一个perl脚本,它将json数据转换为perl,并将输出保存在名为teams.txt的文件和名为backup.txt的文件中,teams.txt的输出就是从该文件中复制出来的。以下是脚本/将数据写入文本文件的部分中的两个代码片段:
my %manager_to_directs;
my %user_to_manager;
my @users;
my $url = "https://xxxxxxxxxxxxxx.com/api/v1/reports/active/week";
my $useragent = LWP::UserAgent->new();
my $response = $useragent->get(($url));
if ($response->code !~ "200" || $response->code !~ "204" ){
while ($url && $url ne "Null") {
my $data = fetch_json($url);
last if !defined $data;
$url = $data->{next};
.
.
.
# write backyard.txt
open my $backyard_fh, ">", "backyard.txt";
foreach my $user (sort keys %user_to_management_chain) {
my $chain = join ',', @{$user_to_management_chain{$user}};
print $backyard_fh "$user:$chain\n";
}
close $backyard_fh;
# write teams.txt
open my $team_fh, ">", "teams.txt";
foreach my $user (sort @users) {
my $followers = $manager_to_followers{$user};
my $followers_joined = $followers ? join (',', sort @$followers) : "";
print $team_fh "$user:$followers_joined\n";
}
close $team_fh;
# write backup.txt, backup for teams.txt
open my $backup_fh, ">", "backup.txt";
copy("teams.txt", "backup.txt")
or die ("Can't copy teams.txt \n");
close $backup_fh;这几乎完全按照我想要的方式工作,但是现在我一直在测试一个负面的场景,脚本中提供的.json url是假的/不存在的,我必须确保没有创建另一个teams.txt文件,并且backup.txt文件仍然保留在上次执行中。
我通过替换
my $url = "https://xxxxxxxxxxxxxx.com/api/v1/reports/active/week";使用
my $url = "https://fakeUrl.com/api/v1/reports/active/week";在这种情况下,404将被通过,程序将失败。在这个测试中,我注意到teams.txt和backyard.txt的内容被擦除了,但是backup.txt文件被擦除了too...and,这是不好的。
我同意每次运行脚本时都会覆盖teams.txt和backyard.txt,但我需要保留backup.txt文件,除非程序成功运行,并且teams.txt中有新内容要复制到backup.txt。
任何我能得到的帮助我都非常感谢!
发布于 2020-06-03 02:34:09
下面是几乎直接取自模块文档的代码片段。
也许你应该尝试这种方法。
use strict;
use warnings;
use feature 'say';
use LWP::UserAgent ();
my $url = 'https://metacpan.org/pod/HTTP::Tiny';
$url = 'https://fakeUrl.com/api/v1/reports/active/week';
my $ua = LWP::UserAgent->new(timeout => 10);
$ua->env_proxy;
my $response = $ua->get($url);
my $data;
if ($response->is_success) {
$data = $response->decoded_content;
}
else {
die $response->status_line;
}
# Process further data
say $data;输出
500 Can't connect to fakeUrl.com:443 (Bad file descriptor) at C:\....\http_lwp.pl line 19.use strict;
use warnings;
use feature 'say';
use HTTP::Tiny;
my $url = 'https://metacpan.org/pod/HTTP::Tiny';
$url = 'https://fakeUrl.com/api/v1/reports/active/week';
my $data;
my $response = HTTP::Tiny->new->get($url);
if( $response->{success} ) {
$data = $response->{content};
} else {
say "$response->{status} $response->{reason}";
exit 1;
}
# Process further data
say $data;输出
403 Forbiddenhttps://stackoverflow.com/questions/62156882
复制相似问题