从Web服务器执行时,为什么Python环境变量不同?

时间:2014-01-24 03:46:39

标签: php python nginx

我有以下可执行的python脚本:

#!/usr/bin/python

import os
print os.environ

当我从命令行以root身份执行它时,我得到以下内容:

{
    'LANG': 'en_US.UTF-8',
    'TERM': 'xterm-256color',
    'SHELL': '/bin/bash',
    'LESSCLOSE': '/usr/bin/lesspipe %s %s',
    'LANGUAGE': 'en_US:en',
    'SHLVL': '1',
    'SSH_TTY': '/dev/pts/0',
    'OLDPWD': '/var/www/bais-mordechai-laravel',
    'COMP_WORDBREAKS': ' \t\n"\'><;|&(:',
    'PWD': '/var/www/bais-mordechai-laravel/public',
    'LESSOPEN': '| /usr/bin/lesspipe %s',
    'SSH_CLIENT': '71.205.188.8 56489 22',
    'LOGNAME': 'root',
    'USER': 'root',
    'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games',
    'MAIL': '/var/mail/root',
    'LS_COLORS':'...',
    'HOME': '/root',
    '_': './pythontest',
    'SSH_CONNECTION': '...'
}

但是当我从一个php脚本(在nginx服务器上运行)运行它并回显我得到的结果时:

{
    'HOME': '/var/www',
    'PWD': '/var/www/bais-mordechai-laravel/public',
    'USER': 'www-data'
}

为什么他们不一样?具体来说,我如何让网络版本包含'PATH'变量?

1 个答案:

答案 0 :(得分:3)

对于apache,请参阅mod_setenv

  

此模块允许控制各种Apache HTTP Server模块使用的内部环境变量。这些变量也作为本机系统环境变量提供给CGI脚本,并可在SSI页面中使用。环境变量可以从调用httpd进程的shell传递。或者,可以在配置过程中设置或取消设置环境变量。

如果您使用的是Apache的FCGId,请参阅FcgidInitialEnv

  

使用FcgidInitialEnv定义要传递给FastCGI应用程序的环境变量。该指令可以多次使用。

     

此设置将应用于为此服务器或虚拟主机生成的所有应用程序。使用FcgidCmdOptions将此设置应用于单个应用程序。

对于Nginx CGI,请参阅env设置。

  

默认情况下,nginx会删除从其父进程继承的所有环境变量,但TZ变量除外。该指令允许保留一些继承的变量,更改它们的值或创建新的环境变量。

如果您使用的是NgxWSGIModule,请参阅wsgi_var设置。

  

指令分配变量,该变量将被添加到   环境字典传递给WSGI应用程序。   可以使用字符串,nginx变量及其   组合作为价值观。未设置的指令继承自   外层。

如果您在(gunicorn | tornado | twisted | etc)+ supervisord下运行您的应用程序,请参阅environment指令。

  

KEY =“val”形式的键/值对列表,KEY2 =“val2”将放置在supervisord进程的环境中(因此在其所有子进程环境中)。此选项可以包含值%(此处)s,它会扩展到找到supervisord配置文件的目录。应引用包含非字母数字字符的值(例如KEY =“val:123”,KEY2 =“val,456”)。否则,引用值是可选的,但建议使用。请注意,子进程将继承用于启动supervisord的shell的环境变量,除了在此处和程序的环境选项中重写的那些变量。

如果您正在使用其他内容,请与我们联系。

您始终可以使用os.environ注入环境变量 - 在(c | fc | ws)gi.py脚本的开头执行此操作。 Se也sys.path

sys.path.append('/usr/local/django')