Как передать среду из моего веб-приложения Python в программу Perl?
-
06-07-2019 - |
Вопрос
Как настроить% ENV в Perl для введения скрипта Perl в контекст моего веб-приложения?
У меня есть веб-сайт, написанный на языке, отличном от Perl (Python). Однако мне нужно использовать приложение Perl, которое состоит из файла .pl:
#!/usr/bin/env perl
"$ENV{DOCUMENT_ROOT}/foo/bar.pm" =~ /^(.+)$/;
require $1;
my $BAR = new BAR(
user => 'foo',
);
print $bar->get_content;
... и модуль bar.pm, который использует " $ ENV {HTTP_HOST} "
, " $ ENV {REQUEST_URI} "
,
" $ ENV {REMOTE_ADDR} "
и " $ ENV {DOCUMENT_ROOT} "
.
Как мне установить этот хеш? Это мой самый первый опыт работы с Perl, поэтому я могу упустить что-то действительно очевидное здесь:)
Решение
Если вы порождаете этот процесс Perl из своего кода Python (в отличие от «непосредственно с веб-сервера»), существует несколько способов установить среду дочернего процесса из среды родительского процесса Python, в зависимости от того, что вы ' используется для «нереста».
Например, если вы используете subprocess.Popen
, вы можете передать аргумент env =
, заданный в желаемом словаре, как документы объяснять:
Если env не None, это должно быть картографирование, определяющее окружающую среду переменные для нового процесса; эти используются вместо наследования текущий процесс & # 8217; среда, которая поведение по умолчанию.
Другие советы
Специальный хеш Perl % ENV
является интерфейсом для среды. (Под капотом он вызывает getenv
и putenv
в зависимости от ситуации.)
Например:
$ cat run.sh
#! /bin/bash
export REMOTE_ADDR=127.0.0.1
perl -le 'print $ENV{REMOTE_ADDR}'
$ ./run.sh
127.0.0.1
Ваш веб-сервер должен устанавливать эти переменные среды.