Admin Future
241 subscribers
51 photos
1 video
4 files
120 links
Превращаем эникейщиков в System Architects.
🚀 Твой навигатор в мире IT-инфраструктуры:

▪️ Hard Skills: Linux, Windows, Network, Security
▪️ Tools: Лучший софт и скрытые фишки
▪️ Mindset: Как думать, чтобы платили много


Админ - @maksimshap
Download Telegram
🐍 Python 3.15 вышел: UTF-8 по умолчанию может сломать ваши скрипты на Windows

Коллеги, важный релиз для всех, кто пишет скрипты автоматизации, интеграции и парсеры системных логов на Python.

📌 ФАКТЫ
Стабильный релиз: 9 октября представлена финальная ветка Python 3.15.

UTF-8 Mode по умолчанию (PEP 686): встроенная функция open() без явного параметра encoding теперь всегда открывает файлы в кодировке UTF-8, игнорируя региональные параметры операционной системы (locale.getencoding()).

Ленивые импорты (PEP 810): синтаксис вида lazy import json — модуль парсится и загружается в память только при первом фактическом вызове атрибута (включается строго явно флагом или директивой). Существенно срезает время холодного старта CLI-утилит.

Экспериментальный JIT: прирост производительности +7–8% на архитектуре x86_64 под Linux.

Сэмплирующий профилировщик Tachyon: низкоуровневый профилировщик без остановки рантайма. Умеет аттачиться к уже запущенному production-процессу и строить flame graph узких мест.

Новые базовые типы: добавлены нативные frozendict (неизменяемый словарь) и sentinel (удобные уникальные маркеры-заглушки вместо object()).

⚠️ ГДЕ ВЫСТРЕЛИТ НА WINDOWS
Исторически на русскоязычных Windows-серверах и рабочих станциях open() по умолчанию поднимал кодировку CP1251 (ANSI) для файлов и CP866 (OEM) для консольных утилит.

После обновления интерпретатора до 3.15:

Выгрузки отчетов, реестров и прайсов из 1С:Предприятия;

Экспортированные CSV-таблицы из классического Excel;

Текстовые журналы старых служб, конфиги и .bat/.cmd скрипты в кодировке ANSI

при попытке прочитать их «по старинке» (open('file.txt')) мгновенно уронят процесс с ошибкой UnicodeDecodeError: 'utf-8' codec can't decode byte... либо тихо запишут кракозябры при сохранении.

🛠 КАК ПРАВИЛЬНО ОБРАБАТЫВАТЬ КОДИРОВКИ
1. Явная фиксация кодировки в Python
Python
# Чтение локальных Windows-выгрузок (1С, Excel, старые сервисы)
with open('export_1c.csv', mode='r', encoding='cp1251') as f:
data = f.read()

# Корректный перехват stdout системных CLI-команд Windows (ipconfig, ping, netstat)
import subprocess

res = subprocess.run(
['ipconfig', '/all'],
capture_output=True,
encoding='cp866',
check=True
)
print(res.stdout)

2. Временный откат поведения через переменные окружения
PowerShell
# Принудительное отключение UTF-8 режима для конкретного сеанса PowerShell
$env:PYTHONUTF8 = '0'
python automation_script.py

3. Экспресс-аудит репозитория скриптов перед обновлением Python
Bash
# Ищем потенциально опасные вызовы open() без аргумента encoding в проекте
grep -rnE "open\([^)]*\)" --include="*.py" . | grep -v "encoding="

💡 В ЧЁМ СУТЬ
Явный параметр

encoding=
в каждом вызове

open()
— базовый стандарт инженерной гигиены, делающий скрипт полностью переносимым между Windows Server, Debian/Ubuntu и любыми версиями рантайма.

Перед тем как обновлять глобальный Python на серверах автоматизации или в контейнерах сборщиков, прогоните аудит кода регуляркой выше.

#skills #python #automation #windows #1c #linux #devops #sysadmin #admin_future