Comment passer de l'environnement de mon application Web Python à un programme Perl?
-
06-07-2019 - |
Question
Comment définir le% ENV de Perl pour introduire un script Perl dans le contexte de mon application Web?
J'ai un site Web écrit dans une langue différente de Perl (Python). Cependant, je dois utiliser une application Perl, qui consiste en un fichier .pl:
#!/usr/bin/env perl
"$ENV{DOCUMENT_ROOT}/foo/bar.pm" =~ /^(.+)$/;
require $1;
my $BAR = new BAR(
user => 'foo',
);
print $bar->get_content;
... et un module bar.pm, qui repose sur "$ ENV {HTTP_HOST}",
, "$ ENV {REQUEST_URI}",
,
"$ ENV {REMOTE_ADDR}"
et "$ ENV {DOCUMENT_ROOT}"
.
Comment dois-je définir ce hachage? C’est ma toute première expérience avec Perl, il se peut donc que je manque quelque chose de vraiment évident ici:)
La solution
Si vous générez ce processus Perl à partir de votre code Python (par opposition à "directement à partir du serveur Web"), il existe plusieurs façons de définir l'environnement de processus enfant à partir de l'environnement de processus parent Python, en fonction de votre choix. utiliser pour le "frai".
Par exemple, si vous utilisez sous-processus.Popen
, vous pouvez passer un argument env =
au dictionnaire souhaité, sous la forme docs expliquer:
Si env n'est pas None, ce doit être un cartographie qui définit l'environnement variables pour le nouveau processus; celles-ci sont utilisés au lieu d’hériter du processus en cours & # 8217; environnement, qui est le comportement par défaut.
Autres conseils
Le hachage % ENV
spécial de Perl constitue l'interface avec l'environnement. (Sous le capot, il appelle getenv
et putenv
selon le cas.)
Par exemple:
$ cat run.sh
#! /bin/bash
export REMOTE_ADDR=127.0.0.1
perl -le 'print $ENV{REMOTE_ADDR}'
$ ./run.sh
127.0.0.1
Votre serveur Web doit définir ces variables d’environnement.