Como posso passar o ambiente do meu aplicativo web Python para um programa Perl?
-
06-07-2019 - |
Pergunta
Como faço para definir% ENV do Perl para introduzir um script Perl no contexto do meu aplicativo web?
Eu tenho um site, escrito em uma linguagem diferente do Perl (Python). No entanto eu preciso usar uma aplicação Perl, que consiste em um arquivo .pl:
#!/usr/bin/env perl
"$ENV{DOCUMENT_ROOT}/foo/bar.pm" =~ /^(.+)$/;
require $1;
my $BAR = new BAR(
user => 'foo',
);
print $bar->get_content;
... e um bar.pm módulo, que se baseia em "$ENV{HTTP_HOST}"
, "$ENV{REQUEST_URI}"
,
"$ENV{REMOTE_ADDR}"
e "$ENV{DOCUMENT_ROOT}"
.
Como devo definir esse hash? Esta é a minha primeira experiência com Perl, então eu pode estar faltando algo realmente óbvio aqui:)
Solução
Se você está gerando esse processo Perl do seu código Python (em oposição a "directamente a partir do servidor web"), existem várias maneiras de configurar o ambiente de processo filho a partir do ambiente do processo pai Python, dependendo do que você está usando para a "desova".
Por exemplo, se você estiver usando subprocess.Popen
, você pode passar um conjunto argumento env=
ao dicionário que você deseja, como o docs explicar:
Se env não é None, ele deve ser um mapeamento que define o ambiente variáveis ??para o novo processo; estes são usados ??em vez de herdar o processo atual ambiente, que é o comportamento padrão.
Outras dicas
de hash especial %ENV
do Perl é a interface para o meio ambiente. (Sob o capô, ele chama getenv
e putenv
conforme o caso.)
Por exemplo:
$ cat run.sh
#! /bin/bash
export REMOTE_ADDR=127.0.0.1
perl -le 'print $ENV{REMOTE_ADDR}'
$ ./run.sh
127.0.0.1
O seu servidor web deve ser a definição dessas variáveis ??de ambiente.