Как получить параметры Python os.environ из сценария CGI?

Когда я использую

os.environ.keys()

в командной строке я получаю переменные окружения, отличные от сценария cgi. Есть ли способ получить переменные среды Python через скрипт CGI?

С помощью

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-скрипт.

Когда я импортирую в 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')

2 ответа

Вы неправильно понимаете ситуацию os.environ просто дает вам значения среды процесса, которая предоставляется операционной системой. Ваш CGI-скрипт работает под Apache, поэтому при запуске из командной строки он отличается от того же скрипта. (Например, USER обязательно будет другим).

Короче говоря, то, что вы просите, не существует. Вы получаете переменные среды Python, они просто не соответствуют вашим ожиданиям. Пожалуйста, объясните, что вы пытаетесь достичь, т. Е. Почему вы пытаетесь достичь этих ценностей среды. Я мог бы рассказать вам, как настроить ваш CGI-скрипт так, чтобы его среда соответствовала вашей среде командной строки, но кто знает, нужно ли вам это?

Редактировать: Итак, ваша цель - импортировать модуль. Вы можете динамически изменять путь импорта модуля, добавляя каталоги в sys.path (список). Попробуйте явно добавить местоположение rdkit, Вам не нужна среда.

Я думаю, что вы можете сделать

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

и вызвать определенный набор переменных среды

Другие вопросы по тегам