Comment puis-je attraper un “échec de décodage JSON” message d'erreur en Perl?
Donc je suis en train de charge test une API REST qui retourne une valeur JSON.
À faire, et que je suis la création de plusieurs instances du script perl.
Le script Perl fondamentalement exige que les URL, et tente de decode_json
. Évidemment, lorsqu'on charge est générée, elle échoue.
Maintenant le problème que j'ai le visage est - Une erreur est affiché sur l'invite de commande, mais ne pas écrire ce message d'erreur dans un fichier.
Le message d'erreur est
malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "Can't connect to 209...") at json_load_test.pl line 39.
Dans tous les trois tentatives en dessous de la ligne 39 désigne:
decode_json($actual_response);
Je suis simplement en exécutant le script sur l'invite de commande comme:
perl json_load_test.pl >> logs/output.txt
J'ATTENDS LE MESSAGE D'ERREUR ÉCRIT EN "output.txt"
Mes trois échoué tentatives sont comme suit.
Tentative 1:
my $ua = LWP::UserAgent->new;
$ua->timeout(3);
$ua->env_proxy;
my $response = $ua->get("http://$j_env/jobs/all.json?status=active");
my $actual_response=$response->decoded_content;
decode_json($actual_response);
if ($? == -1)
{print "\n Failed to execute: $!\n"; }
Tentative 2:
my $ua = LWP::UserAgent->new;
$ua->timeout(3);
$ua->env_proxy;
my $response = $ua->get("http://$j_env/jobs/all.json?status=active");
my $actual_response=$response->decoded_content;
my $perl_scalar= decode_json($actual_response);
if ($perl_scalar)
{ok(1,"For process $u2 inside counter $counter ");}
else
{ok(0,"FAILED!!! process $u2 inside counter $counter");}
Tentative 3:
my $ua = LWP::UserAgent->new;
$ua->timeout(3);
$ua->env_proxy;
my $response = $ua->get("http://$j_env/jobs/all.json?status=active");
my $actual_response=$response->decoded_content;
decode_json($actual_response) or die "FAILED!!!!";
OriginalL'auteur Amey | 2011-10-18
Vous devez vous connecter pour publier un commentaire.
Il ressemble à la message d'erreur est venue de stderr, pas de sortie standard (stdout). Ainsi,
Ou quelque chose à cet effet. Si vous souhaitez à la fois dans un seul fichier:
EDIT:
Si pour certaines raisons vous avez voulu intercepter l'erreur dans le perl et de l'envoyer sur la sortie standard, vous pouvez:
EDIT2:
Comme daxim points dans la modification de notes, Essayez::Minuscule peut être plus simple:
perl json_load_test.pl > logs/output.txt 2>&1 logs/errors.txt
Par souci d'équité, l'OP n'a pas préciser si elles ont été en utilisant Unix ou un système d'exploitation je viens de faire.
Chose est, 1>2 créer un fichier nommé "2" dans le répertoire courant 🙂
Merci Thom pour votre réponse, j'ai opté pour votre deuxième solution. L'aide que les messages d'erreur cessé de l'affichage sur la console, mais ne fait toujours pas l'écrire dans le logs/output.txt fichier. AUSSI, puis-je contrôler le texte qui sera écrit dans?
Si vous voulez contrôler quel est le message d'erreur, vous pouvez soit 1) réécrire le module JSON à l'affichage d'un message d'erreur différent (non recommandé), ou 2) utiliser le
eval
méthode que j'ai posté et impression de quelque chose d'autre à la place de$e
.OriginalL'auteur Tamzin Blake