Python + сценарий CGI не может получить доступ к переменным среды

Тебе не стоит беспокоиться о переименовании undefined. Если кто-то переименует undefined, у вас будет гораздо больше проблем, чем с несколькими, если проверки не пройдены. Если вы действительно хотите защитить свой код, оберните его в IFFE (немедленно вызванное выражение функции) следующим образом:

(function($, Backbone, _, undefined) {
    //undefined is undefined here.
})(jQuery, Backbone, _);

Если вы работаете с глобальными переменными (что уже неправильно) в среде браузера Я бы проверил неопределенность следующим образом:

if(window.neverDefined === undefined) {
    //Code works
}

Поскольку глобальные переменные являются частью объекта окна, вы можете просто проверить неопределенность вместо приведения к строке и сравнения строк.

Кроме того, почему ваши переменные не определены? Я видел много кода, где они проверяют существование переменных и выполняют некоторые действия, основанные на этом. Ни разу я не видел, где этот подход был правильным.

5
задан ametade 1 July 2009 в 18:03
поделиться

6 ответов

Мне удалось решить проблему.

Каким-то образом пользователь и группа, которые использовали apache, не имели доступа к переменным среды. Я решил проблему, изменив пользователя и группу, которые использовал apache, на пользователя, у которого я был уверен, что у него будет доступ к этим переменным.

Странно (и досадно), что так сложно установить эти переменные с помощью Python.

Спасибо всем, кто ответил на мой вопрос!

1
ответ дан 18 December 2019 в 09:52
поделиться

Вы можете полностью устранить проблему, если вы избавляетесь от необходимости устанавливать переменные среды. Вот примечание о том, как это сделать, установив Oracle Instant Client на свой компьютер.

установка Oracle Instantclient в Linux без установки переменных среды?

2
ответ дан 18 December 2019 в 09:52
поделиться

Вы можете использовать сценарий оболочки чтобы реализовать CGI, установите переменные среды в сценарии оболочки и вызовите сценарий python из сценария оболочки.

Установка переменных среды изнутри python кажется сложной задачей, особенно когда вы имеете дело с тем, как загружаются библиотеки. ..

1
ответ дан 18 December 2019 в 09:52
поделиться

You need this:

os.environ['ORACLE_HOME'] = '/oracledb/10.2.0/'
os.environ['LD_LIBRARY_PATH'] = '/oracledb/10.2.0/lib'

instead of using os.putenv() because os.putenv() doesn't update os.environ, which cx_Oracle is presumably looking at.

Documentation: Miscellaneous operating system interfaces says: "Note: Calling putenv() directly does not change os.environ, so it’s better to modify os.environ."

3
ответ дан 18 December 2019 в 09:52
поделиться

Ваши операторы не в порядке?

#!/usr/bin/python 
import os 
os.putenv('ORACLE_HOME', '/oracledb/10.2.0/') 
os.putenv('LD_LIBRARY_PATH', '/oracledb/10.2.0/lib') 

import cx_Oracle 
import defs as df 

con = cx_Oracle.Connection(df.DB_USER, df.DB_PASS, df.DB_SID) 
print con
0
ответ дан 18 December 2019 в 09:52
поделиться

Из короткого google о проблеме, возможно, ваша проблема связана с окончанием / в ORACLE_HOME .
Попробуйте удалить его (а также воспользоваться предложением Ричи) и посмотрите, работает ли оно.

1
ответ дан 18 December 2019 в 09:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: