PyVFS
Быстрый старт
Допустим, вы имеете скрипт my_script.py и хотите понять, что происходит внутри него с объектами класса MyClass. Для этого нужно следующее:
from pyvfs.objectfs import export
@export
class MyClass(object):
pass
После этого достаточно запустить скрипт. Пока он будет работать, объекты класса MyClass будут доступны на виртуальной файловой системе.
Как выбрать ФС и как её подключить
Для простоты интеграции с существующими сервисами (разрабатывается она для отладки большого сурового демона на петоне) библиотека ориентируется на переменные окружения.
- PYVFS_PROTO — может быть 9p (по умолчанию) или fuse.
- PYVFS_PORT — TCP-порт (только для 9p, по умолчанию 10001)
- PYVFS_ADDRESS — IPv4-адрес, на котором слушать запросы (только для 9p, по умолчанию 127.0.0.1)
- PYVFS_MOUNTPOINT — директория, куда монтировать ФС (только для fuse, по умолчанию ./mnt)
- PYVFS_DEBUG — включать ли отладочный вывод сервера ФС на stderr (по умолчанию False)
- PYVFS_LOG — добавлять ли файл /log и корневой обработчик журналирования (по умолчанию False)
Если протокол выбран 9p, в системе необходимо иметь python-module-py9p. ФС будет экспортирована по умолчанию по адресу 127.0.0.1:10001, подключить её можно с помощью команды
# mount -t 9p -o ro,port=10001 127.0.0.1 /mnt
Если протокол выбран fuse, файловая система автоматически будет уже смонтирована в директорию, указанную в переменной окружения PYVFS_MOUNTPOINT. Для работы протокола fuse нужно иметь в системе python-module-fuse. По окончанию работы не забудьте отмонтировать ФС (пока что библиотека этого автоматически не делает).
Плюсы
- Может использоваться для мониторинга структур без использования отладчиков, без установки брейкпойнтов и так далее. Библиотека не служит и не может служить заменой отладчикам, однако часто нужно всего лишь получить содержимое внутренних структур в рантайме.
- Простота интеграции: всё, что надо, это добавить в любой код две строчки, одну на импорт, вторую для декорирования нужного класса. Если необходимо интегрировать с сервисом, то переменные окружения можно экспортировать в init-скрипте или где там теперь это модно делать, либо использовать значения по умолчанию.
- В отличие от разных RPC API, позволяет работать простыми старыми средствами шелла.
Минусы
- Некоторые заморочные случаи петонических структур, криво отображённые на файловую структуру, могут обрушить модуль VFS. А если ФС примонтирована, скажем, через системный mount, то дело может дойти до оопса. На рабочие сервера имеет смысл ставить только если до конца понимаете, что может случиться.
- Пока что работает только на read-only. Но read-write режим запланирован на ближайшее будущее. В первом приближении он позволит менять значения имеющихся атрибутов (да хоть из shell-скриптов), во втором — создавать объекты.
- Библиотека на довольно ранней стадии развития, это тоже вряд ли можно занести в плюсы.
Смотри также
Более подробно с переменными окружения и примерами использования можно ознакомиться здесь: http://peet.spb.ru/pyvfs/ Ещё более подробно можно посмотреть в коде на гитхабе https://github.com/svinota/pyvfs или на git.alt.