Как получить параметры 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, ...})
и вызвать определенный набор переменных среды