首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制并保留以前的输出,以便备份转换后的json数据

复制并保留以前的输出,以便备份转换后的json数据
EN

Stack Overflow用户
提问于 2020-06-03 00:36:48
回答 1查看 30关注 0票数 1

我有一个perl脚本,它将json数据转换为perl,并将输出保存在名为teams.txt的文件和名为backup.txt的文件中,teams.txt的输出就是从该文件中复制出来的。以下是脚本/将数据写入文本文件的部分中的两个代码片段:

代码语言:javascript
复制
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文件仍然保留在上次执行中。

我通过替换

代码语言:javascript
复制
my $url = "https://xxxxxxxxxxxxxx.com/api/v1/reports/active/week";

使用

代码语言:javascript
复制
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。

任何我能得到的帮助我都非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-06-03 02:34:09

下面是几乎直接取自模块文档的代码片段。

也许你应该尝试这种方法。

代码语言:javascript
复制
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;

输出

代码语言:javascript
复制
500 Can't connect to fakeUrl.com:443 (Bad file descriptor) at C:\....\http_lwp.pl line 19.
代码语言:javascript
复制
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;

输出

代码语言:javascript
复制
403 Forbidden
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62156882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档