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

StackOverflow https://stackoverflow.com/questions/1022694

  •  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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top