ProHoster > Блог > адміністрування > Здружуємо Python та Bash: реліз бібліотек python-shell та smart-env v. 1.0.1
Здружуємо Python та Bash: реліз бібліотек python-shell та smart-env v. 1.0.1
Доброго часу доби всім!
29 лютого 2020 року відбувся офіційний мікрореліз бібліотек smart-env и оболонка python. Тим, хто не в курсі, пропоную заздалегідь прочитати перший пост.
Якщо коротко, то серед змін — автодоповнення команд, розширення можливостей із запуску команд, трохи рефакторингу та багфіксів.
За деталями прошу під кат.
Що нового в python-shell?
Почну одразу з десерту.
Автодоповнення команд
Погодьтеся — зручно, коли редактор/IDE/термінал нагадує назву команди, а іноді й параметри виклику? Ось і python-shell потроху просувається у забезпеченні такого функціоналу. У зв'язку з тим, що поля класу Shell під капотом de-facto не є його полями (всюдисущий __getattr__), автодоповнення створено також з нуля (перевантаженням, відповідно, методу __dir__). На даний момент автодоповнення працює в середовищах BPython та IPython. Звичайно, хочеться побачити інтеграцію з маститішими продуктами на кшталт PyCharm, і в цьому напрямку йде вивчення можливостей реалізації.
Додавання властивостей
В рамках релізу клас Shell отримав нову властивість last_command. Потреба в ньому виникла через те, що при генерації виключення ShellException командою з ненульовим кодом повернення об'єкт Command не повертався з виклику __call__() об'єкта команди. Тепер є можливість зробити так:
Також розширився перелік властивостей об'єкта Command. Додано поле errors, яке повертає виведення команди до потоку помилок.
Запуск команд із Python-невалідними іменами
Практично в будь-якій системі є хоч одна програма, назва якої не підходить як ідентифікатор Python (наприклад, відома утиліта 2to3). Викликати її за допомогою
Shell.2to3()
не вийде - інтерпретатор не пропустить.
Рішення - викликати команду обхідним шляхом:
Shell("2to3") # возвращает объект команды
Варто зауважити, що так само можна запускати і валідні з погляду інтерпретатора команди, що залишає можливість робити гнучкі скрипти на кшталт
Реалізовані методи __repr__() та __str__() об'єкта класу Command, які тепер видають інтуїтивно зрозумілі значення (команду з параметрами та її stdout-вихлоп відповідно).
Дрібні виправлення за кодом.
Додавання покриття тестами, а також реорганізація наявних.
Додавання класів Subprocess і Process, мета яких — створення додаткового рівня абстракції під час роботи з модулем subprocess. Здебільшого необхідно для усунення повторень коду при роботі з Python 2/3, але потенційно може дати й інші бонуси.
Що нового у smart-env?
На відміну від python-shell, у бібліотеці smart-env змін сталося менше. Причина цього проста — брак вільного часу, в ході чого деякі потенційні покращення (наприклад, автодоповнення змінних оточення) було перенесено на наступний реліз.
За фактом, у бібліотеці зроблено такі зміни:
Дрібні виправлення за кодом.
Рефакторинг.
Реорганізація та доопрацювання наявних тестів.
Плани з наступних релізів
Бібліотека python-shell
Додавання підтримки неблокуючих дзвінків команд (паралелізація виконання).
Бібліотека smart-env
Реалізація автодоповнення змінних оточення у класі ENV.
Підтримка оператора in для перевірки існування env-змінної.
Реалізація підтримки функцій str() та repr() для класу ENV.
Про дати наступних релізів буде додатково оголошено у наступних каналах зв'язку: