Перейти к содержанию

Установка и подключение

Установка

pip install raclib

Требуется Python 3.12 или новее. Внешних зависимостей у библиотеки нет.

Где взять rac

rac — консольная утилита администрирования из поставки сервера 1С:Предприятия. Она лежит рядом с исполняемым файлом сервера:

/opt/1cv8/x86_64/8.3.24.1548/rac
C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe

Путь к rac передаётся в Client. Версия rac должна совпадать с версией сервера: при расхождении RAC отвечает ошибкой «Различаются версии клиента и сервера», и библиотека поднимает raclib.errors.IncorrectVersionError.

Подключение

import raclib as rc

client = rc.Client("/opt/1cv8/x86_64/8.3.24.1548/rac")
session = rc.Session(client, host="cluster.example.com", port=1545, timeout=30)

Session описывает одну пару host:port — то есть один сервер администрирования. Для нескольких серверов создавайте несколько сессий; в асинхронном режиме их удобно обходить через asyncio.gather.

Параметры сессии

Параметр Назначение По умолчанию
host хост сервера администрирования localhost
port порт сервера администрирования 1545
timeout предел ожидания ответа в секундах None (бесконечно)
encoding кодировка вывода rac по платформе
new_window показывать окно консоли (Windows) False
debug печатать argv и вывод rac False

Всегда задавайте timeout

Без таймаута недоступный сервер администрирования подвесит вызывающий поток навсегда. Для асинхронного режима это означает зависание всей задачи asyncio.gather, а не только одного запроса.

Кодировка

rac.exe на Windows печатает в cp866, на Linux и macOS — в UTF-8. Библиотека подбирает кодировку по платформе автоматически. Если сервер настроен иначе, укажите кодировку явно — иначе русские ключи в выводе будут испорчены и разбор не найдёт ни одного поля:

session = rc.Session(client, encoding="utf-8")

Проверка соединения

Самый дешёвый способ убедиться, что путь к rac, хост и порт верны:

import raclib as rc

session = rc.Session(
    rc.Client("/opt/1cv8/x86_64/8.3.24.1548/rac"),
    host="cluster.example.com",
    timeout=10,
)

print(rc.Agent.version(session))   # версия агента и RAC
print(rc.Cluster.list(session))

Путь к rac проверяется при первом запуске команды, а не при создании Client: можно собрать конфигурацию заранее, даже если каталог с 1С появится позже. Если файл не найден, не исполняем или указывает на каталог — поднимается raclib.errors.RACNotFoundError, и процесс не запускается.

Отладка

session = rc.Session(client, timeout=10, debug=True)
rc.Cluster.list(session)

В debug-режиме печатаются argv команды, её вывод, а при ошибке — содержимое stderr. Это самый быстрый способ понять, какая именно команда ушла в rac:

[DEBUG] ['/opt/1cv8/x86_64/8.3.24.1548/rac', 'cluster.example.com:1545', 'cluster', 'list']