Как передать среду из моего веб-приложения Python в программу Perl?

1

Как установить Perl% ENV для представления Perl script в контексте моего веб-приложения?

У меня есть веб-сайт, написанный на языке, отличном от 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, поэтому мне может не хватать что-то действительно очевидное здесь:)

Теги:
environment

2 ответа

4
Лучший ответ

Если вы создаете этот процесс Perl из своего кода Python (в отличие от "непосредственно с веб-сервера" ), существует несколько способов установить дочернюю среду процесса из родительской среды Python, в зависимости от того, что вы используя для "нереста".

Например, если вы используете subprocess.Popen, вы можете передать аргумент env= в словарь, который вы хотите, так как docs объясните:

Если env не является None, это должно быть сопоставление, определяющее среду переменные для нового процесса; эти используются вместо наследования текущая среда процесса, которая поведение по умолчанию.

2

Perl special %ENV hash - это интерфейс к среде. (Под капотом он называет 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

Ваш веб-сервер должен устанавливать эти переменные среды.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню