如何将环境从Python Web应用程序传递到Perl程序?

时间:2009-06-20 22:19:44

标签: python perl environment

如何设置Perl的%ENV以将Perl脚本引入我的Web应用程序的上下文中?

我有一个网站,用不同于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 个答案:

答案 0 :(得分:4)

如果您从Python代码中生成Perl进程(而不是“直接来自Web服务器”),有几种方法可以从Python父进程环境设置子进程环境,具体取决于您是什么用于“产卵”。

例如,如果您使用subprocess.Popen,则可以将env=参数集传递给所需的字典,docs解释:

  

如果env不是None,则必须是a   定义环境的映射   新过程的变量;这些   用来代替继承   当前流程的环境,即   默认行为。

答案 1 :(得分:2)

Perl的特殊%ENV哈希是环境的接口。 (在引擎盖下,它会根据需要调用getenvputenv。)

例如:

$ cat run.sh 
#! /bin/bash

export REMOTE_ADDR=127.0.0.1

perl -le 'print $ENV{REMOTE_ADDR}'

$ ./run.sh 
127.0.0.1

您的网络服务器应该设置这些环境变量。