【问题标题】:How to get python os.environ parameters from cgi script?如何从 cgi 脚本获取 python os.environ 参数?
【发布时间】:2013-09-22 23:58:02
【问题描述】:

当我使用时

os.environ.keys()

在命令行中,我得到的环境变量与在 cgi 脚本中不同。有没有办法通过cgi脚本获取python环境变量?

使用

subprocess.Popen

我没有得到相同的参数。

你能帮帮我吗?

已编辑:

例如在命令行中我的环境参数是

['rvm_version', 'rvm_path', 'LESSOPEN', 'escape_flag', 'SSH_CLIENT', 
'LOGNAME', 'USER', 'HOME', 'PATH', 'RDBASE', 'LD_LIBRARY_PATH', 'LANG',           
'TERM', 'SHELL', '_first', 'SHLVL', '__array_start', 'G_BROKEN_FILENAMES', 
'HISTSIZE', 'LISISTOOLS_PATH', 'GEM_PATH', 'rvm_bin_path', 'rvm_prefix', 
'PYTHONPATH', 'IRBRC', 'AUTODOCK_PATH', 'MY_RUBY_HOME', 'BOOST', '_', 
 '_second', 'SSH_CONNECTION', 'RUBY_VERSION', 'GRANATUM_LICENSE_FILE',      
 'OLDPWD', 'HOSTNAME', 'HISTCONTROL', 'PWD', 'SSH_TTY', 'MAIL', 'LS_COLORS', 
 'GEM_HOME', 'MGLTOOLS']

但从我的 cgi 脚本中是:

['HTTP_COOKIE', 'SERVER_SOFTWARE', 'SCRIPT_NAME', 'SERVER_SIGNATURE', 
'REQUEST_METHOD', 'SERVER_PROTOCOL', 'QUERY_STRING', 'PATH', 'DUMP_FILE', 
'HTTP_ACCEPT_CHARSET', 'HTTP_USER_AGENT', 'HTTP_CONNECTION', 'HTTP_REFERER', 
'SERVER_NAME', 'REMOTE_ADDR', 'SERVER_PORT', 'SERVER_ADDR', 'DOCUMENT_ROOT', 
'SCRIPT_FILENAME', 'SERVER_ADMIN', 'HTTP_HOST', 'REQUEST_URI', 'HTTP_ACCEPT',         
'GATEWAY_INTERFACE', 'REMOTE_PORT', 'HTTP_ACCEPT_LANGUAGE',     
'HTTP_ACCEPT_ENCODING']

我想要第一组环境变量(命令行)通过cgi-script。

当我在 cgi 脚本中导入时

from rdkit import Chem

我得到了错误

 /home/galaxy/working/RDKit/rdkit/Chem/__init__.py in ()
16  
17 """
18 from rdkit import rdBase
<type 'exceptions.ImportError'>: libRDGeneral.so.1: cannot open shared object 
file: No such file or directory 
  args = ('libRDGeneral.so.1: cannot open shared object file: No such file or 
         directory',) 
  message = 'libRDGeneral.so.1: cannot open shared object file: No such file 
         or directory'

但在命令行中我没有收到任何错误。

PYTHONPATH 包含

'/home/galaxy/working:/home/galaxy/working/RDKit:/home/galaxy/working/mgltools_x86_64Linux2_1.5.4/MGLToolsPckgs:/home/galaxy/working/mgltools_x86_64Linux2_1.5.4/MGLToolsPckgs'

我更新 sys.path 使用

 sys.path.append('/home/galaxy/working')
 sys.path.append('/home/galaxy/working/RDKit')
 sys.path.append('/home/galaxy/working/mgltools_x86_64Linux2_1.5.4/
 MGLToolsPckgs')
 sys.path.append('/home/galaxy/working/mgltools_x86_64Linux2_1.5.4/      
 MGLToolsPckgs')

【问题讨论】:

  • 你的命令行环境和CGI运行的环境不一样。你想通过环境收集什么信息?
  • 你在每个环境中得到不同的变量和值仅仅是因为它们是不同的环境......
  • 有没有办法通过cgi脚本获取命令行环境变量?
  • 您的PYTHONPATH 环境变量是什么样的? rdkit 是从哪里导入的?
  • 我在问题的末尾添加了它。

标签: python cgi environment-variables rdkit


【解决方案1】:

您误解了情况:os.environ 只是为您提供了操作系统提供的进程环境的值。您的 CGI 脚本在 Apache 下运行,因此当您从命令行运行它时,它具有与同一脚本不同的环境。 (例如,USER 必然不同)。

简而言之,您所要求的不存在。您正在获取 python 环境变量,它们不是您所期望的。请解释您要完成的目标,即为什么您要尝试获得这些环境值。我可以告诉您如何设置您的 CGI 脚本,使其环境与您的命令行环境相匹配,但谁知道这是否是您需要的?

编辑:所以你的目标是导入一个模块。您可以通过将目录附加到sys.path(列表)来动态更改模块导入路径。尝试显式添加rdkit 的位置。你不需要环境。

【讨论】:

  • 我知道,但是我无法在 python cgi-script 中导入模块,因为这些变量不同,即使我在 sys.path 中添加了路径,apache 也找不到该模块。
  • 继续说下去。解释您要导入的内容以及失败的原因/方式。把它放在你的问题中,这就是你需要问的问题。
  • 谢谢。请再次查看我的问题。
  • 我添加了rdkit的位置,但是问题存在。
  • 让我看看我的水晶球……不,没什么。您必须自己解决问题或提供更多信息。
【解决方案2】:

我觉得你可以的

subprocess.Popen([cmd],env={'my':'environment','vars':4, ...})

并强制一组特定的环境变量

【讨论】:

  • 是的,我知道,但我想要 python 环境变量的值
猜你喜欢
  • 2015-08-28
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
相关资源
最近更新 更多