ошибки Apache + Python

Denis

Новичок
Пользователь
Сен 16, 2020
2
0
1
Столкнулся с тем, что код при выполнении в Apache и в IDLE работает по разному. Пользуюсь простым cgi-bin.

В IDLE или при использовании встроенного HTTP сервера все работает - выводит список, а при вызове из Apache получаю ошибку:

"ERROR: select_list_ou (, com_error(-2147352567, 'Ошибка.', (0, 'Provider', 'Класс не зарегистрирован', None, 1240640, -2147221164), None), ) "

Это не единственный момент где замечено, что код выполняется по разному. Единственной вывод к чему пришёл, что возможно ошибка как то связана с созданием и использованием COM объектов. Возможно в самом Apache есть, какае то настройка связанная с этим.

ОС: Win 10 x64
Python: 3.7.4
Apache: httpd-2.4.43-win64-VS16

Package Version
------------------ ---------
adodbapi 2.6.2.0
appdirs 1.4.4
asgiref 3.2.10
certifi 2020.6.20
chardet 3.0.4
distlib 0.3.1
filelock 3.0.12
future 0.18.2
idna 2.10
importlib-metadata 1.7.0
ldap3 2.8
pip 20.2.2
psycopg2 2.8.3
pyad 0.6.0
pyasn1 0.4.8
pyasn1-modules 0.2.8
pypiwin32 223
PyQt5 5.13.2
PyQt5-sip 12.7.0
pytz 2020.1
pywin32 228
requests 2.24.0
setuptools 50.3.0
six 1.15.0
sqlparse 0.3.1
urllib3 1.25.10
virtualenv 20.0.31
zipp 3.1.0

Вот содержимое файла .py
Код:
#!C:\Python\Python37\python.exe

import sys
import cgitb
import html
import http.cookies
import pyad.adquery
import pyad.aduser

cgitb.enable(display=1, logdir="D:/Soft/Apache/httpd-2.4.43-win64-VS16/Apache24/htdocs/Logs")

# ---
def select_list_ou():
     
    try:
        q = pyad.adquery.ADQuery()
       
        q.execute_query(
            attributes = ["description", "postalCode", "name", "distinguishedName"],
            where_clause = "objectClass = 'organizationalUnit'"
        )
       
    except Exception:
        error = "ERROR: select_list_ou "+str(sys.exc_info())
        print(error+"\n")
        return []

    return q.get_results()

# --- MAIN ---

print ("Content-type: text/html\n\n")
print ("Hello")

listou = select_list_ou()
for ou in listou:
    print(ou)
 

Denis

Новичок
Пользователь
Сен 16, 2020
2
0
1
Решил попробовать,
сделать обращение к другой БД другим способом, но с тем же результатом, т.е. в В IDLE или при использовании встроенного HTTP сервера все работает - выводит список, а при вызове из Apache получаю ошибку:

DatabaseError: (-2147352567, 'Ошибка.', (0, 'Provider', 'Класс не зарегистрирован', None, 1240640, -2147221164), None)

Которая возникает в строке:

Код:
self._execute_command()

Я только разбираюсь с Python, но возникает ощущение, что или он плохо "дружит" с Apache или просто совсем не подходит для вэб.

Код:
#!C:\Python\Python37\python.exe

import adodbapi
import cgitb

cgitb.enable(display=1, logdir="D:/Soft/Apache/httpd-2.4.43-win64-VS16/Apache24/htdocs/Logs")

print("Content-type: text/html\n\n")

txt_conn = "Provider=Advantage.OLEDB.1;Data Source=//Srv1.src;CharType=ANSI;TableType=ADS_ADT;ServerType=ADS_REMOTE_SERVER;TrimTrailingSpaces=True;User ID=zzz;Password=xxx"

db = adodbapi.connect(txt_conn)
cursor = db.cursor()
cursor.execute("SELECT * FROM dc000082 WHERE priznak=658")
records = cursor.fetchall()

print("Hello")
print(records)
for r in records:
    print(r)
 

Форум IT Специалистов