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

Как настроить Perl в% ENV, чтобы ввести 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, поэтому я могу упустить что-то действительно очевидное:)

Ответы [ 2 ]

4 голосов
/ 21 июня 2009

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

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

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

2 голосов
/ 21 июня 2009

Специальный хэш 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

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

...