- Home »

Как написать свою первую программу на Python 3
Рано или поздно каждый системный администратор сталкивается с необходимостью написать собственный скрипт для автоматизации рутинных задач. И Python 3 — это наиболее логичный выбор для этих целей. Эта статья покажет, как быстро начать писать код на Python, не углубляясь в теоретические дебри. Мы разберём установку, настройку среды и создание первой программы, которая сразу же принесёт пользу в повседневной работе с серверами.
Если вы администрируете серверы, настраиваете конфигурации и периодически ловите себя на мысли “а вот это можно было бы автоматизировать”, то Python станет вашим надёжным помощником. Язык изначально создавался с философией “простота и читаемость кода”, что делает его идеальным для быстрого решения админских задач — от парсинга логов до автоматического деплоя.
Как это работает: основы Python для админов
Python — интерпретируемый язык программирования, что означает простоту запуска скриптов без предварительной компиляции. Достаточно написать код в текстовом файле с расширением .py и выполнить его через интерпретатор. Это особенно удобно для серверных задач, где нужно быстро решить конкретную проблему.
Основные преимущества Python для системного администрирования:
- Огромное количество готовых библиотек для работы с сетью, файловой системой, базами данных
- Кросс-платформенность — один код работает на Linux, Windows, macOS
- Активное сообщество и множество решений на Stack Overflow
- Простой синтаксис, позволяющий сосредоточиться на задаче, а не на особенностях языка
Установка и настройка Python 3
Большинство современных Linux-дистрибутивов поставляются с предустановленным Python 3. Проверить наличие и версию можно командой:
python3 --version
Если Python не установлен или версия устарела, установите его через пакетный менеджер:
# Ubuntu/Debian
sudo apt update && sudo apt install python3 python3-pip
# CentOS/RHEL
sudo yum install python3 python3-pip
# или для новых версий
sudo dnf install python3 python3-pip
# Arch Linux
sudo pacman -S python python-pip
Для работы с виртуальными окружениями (крайне рекомендуется) установите venv:
sudo apt install python3-venv # Ubuntu/Debian
Создание первого скрипта: практический пример
Давайте создадим простой, но полезный скрипт для мониторинга дискового пространства. Создайте файл disk_monitor.py
:
#!/usr/bin/env python3
import shutil
import sys
def check_disk_space(path="/"):
"""Проверяет свободное место на диске"""
total, used, free = shutil.disk_usage(path)
# Переводим в гигабайты
total_gb = total // (1024**3)
used_gb = used // (1024**3)
free_gb = free // (1024**3)
usage_percent = (used / total) * 100
print(f"Диск {path}:")
print(f"Всего: {total_gb} GB")
print(f"Использовано: {used_gb} GB ({usage_percent:.1f}%)")
print(f"Свободно: {free_gb} GB")
# Предупреждение при заполнении диска более чем на 80%
if usage_percent > 80:
print("⚠️ ВНИМАНИЕ: Диск заполнен более чем на 80%!")
return False
return True
if __name__ == "__main__":
path = sys.argv[1] if len(sys.argv) > 1 else "/"
check_disk_space(path)
Сделайте скрипт исполняемым и запустите:
chmod +x disk_monitor.py
python3 disk_monitor.py
# или для конкретного пути
python3 disk_monitor.py /var
Работа с виртуальными окружениями
Виртуальные окружения позволяют изолировать зависимости проектов. Это критически важно на серверах, где могут работать несколько приложений с разными требованиями к версиям библиотек.
# Создание виртуального окружения
python3 -m venv myproject_env
# Активация
source myproject_env/bin/activate
# Деактивация
deactivate
После активации все установленные пакеты будут доступны только в рамках этого окружения:
# Установка пакетов в виртуальное окружение
pip install requests psutil
# Сохранение списка зависимостей
pip freeze > requirements.txt
# Установка зависимостей из файла
pip install -r requirements.txt
Практические примеры: скрипты для реальных задач
Вот несколько полезных примеров скриптов, которые пригодятся в работе:
1. Мониторинг процессов
#!/usr/bin/env python3
import psutil
import time
def monitor_processes():
"""Мониторинг процессов с высоким потреблением CPU"""
processes = []
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_percent']):
try:
proc_info = proc.info
if proc_info['cpu_percent'] > 10: # Процессы с CPU > 10%
processes.append(proc_info)
except (psutil.NoSuchProcess, psutil.AccessDenied):
pass
processes.sort(key=lambda x: x['cpu_percent'], reverse=True)
print("Процессы с высоким потреблением CPU:")
for proc in processes[:10]: # Топ 10
print(f"PID: {proc['pid']}, Name: {proc['name']}, "
f"CPU: {proc['cpu_percent']:.1f}%, "
f"Memory: {proc['memory_percent']:.1f}%")
if __name__ == "__main__":
monitor_processes()
2. Автоматическая очистка логов
#!/usr/bin/env python3
import os
import time
from pathlib import Path
def cleanup_logs(log_dir="/var/log", days_old=30):
"""Удаляет логи старше указанного количества дней"""
log_path = Path(log_dir)
cutoff_time = time.time() - (days_old * 24 * 60 * 60)
deleted_files = []
for log_file in log_path.rglob("*.log"):
try:
if log_file.stat().st_mtime < cutoff_time:
file_size = log_file.stat().st_size
log_file.unlink()
deleted_files.append((str(log_file), file_size))
except (OSError, PermissionError) as e:
print(f"Ошибка при удалении {log_file}: {e}")
total_size = sum(size for _, size in deleted_files)
print(f"Удалено {len(deleted_files)} файлов")
print(f"Освобождено {total_size / (1024**2):.2f} MB")
return deleted_files
if __name__ == "__main__":
cleanup_logs()
Сравнение с другими решениями
Аспект | Python | Bash | Perl | Go |
---|---|---|---|---|
Скорость написания | Высокая | Высокая | Средняя | Средняя |
Читаемость кода | Отличная | Плохая | Плохая | Хорошая |
Производительность | Средняя | Высокая | Высокая | Очень высокая |
Экосистема библиотек | Огромная | Ограниченная | Большая | Растущая |
Подходит для новичков | Да | Частично | Нет | Частично |
Полезные библиотеки для системного администрирования
Вот список must-have библиотек для админских задач:
- psutil — информация о системе и процессах
- requests — работа с HTTP API
- paramiko — SSH-подключения
- fabric — автоматизация деплоя
- click — создание CLI-приложений
- schedule — планировщик задач
- watchdog — мониторинг файловой системы
Установка и пример использования:
pip install psutil requests paramiko
# Пример использования requests для проверки доступности сервиса
import requests
def check_service_health(url):
try:
response = requests.get(url, timeout=5)
if response.status_code == 200:
print(f"✅ {url} доступен")
return True
else:
print(f"❌ {url} вернул код {response.status_code}")
return False
except requests.RequestException as e:
print(f"❌ Ошибка при подключении к {url}: {e}")
return False
# Проверка списка сервисов
services = ["http://localhost:80", "http://localhost:443"]
for service in services:
check_service_health(service)
Интеграция с системными утилитами
Python отлично интегрируется с системными командами через модуль subprocess
:
import subprocess
import json
def get_system_info():
"""Получение информации о системе"""
# Выполнение команды и получение результата
result = subprocess.run(['df', '-h'], capture_output=True, text=True)
if result.returncode == 0:
print("Информация о дисках:")
print(result.stdout)
else:
print("Ошибка выполнения команды:", result.stderr)
def restart_service(service_name):
"""Перезапуск системной службы"""
try:
subprocess.run(['systemctl', 'restart', service_name], check=True)
print(f"Служба {service_name} перезапущена")
except subprocess.CalledProcessError as e:
print(f"Ошибка перезапуска службы {service_name}: {e}")
# Использование
get_system_info()
restart_service("nginx")
Автоматизация и планирование задач
Для автоматизации регулярных задач можно использовать библиотеку schedule
:
import schedule
import time
import logging
# Настройка логирования
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('/var/log/python_scheduler.log'),
logging.StreamHandler()
]
)
def backup_databases():
"""Задача резервного копирования"""
logging.info("Начинаю резервное копирование баз данных")
# Здесь код для бэкапа
logging.info("Резервное копирование завершено")
def check_disk_space():
"""Проверка дискового пространства"""
# Ваш код проверки
logging.info("Проверка дискового пространства выполнена")
# Планирование задач
schedule.every().day.at("02:00").do(backup_databases)
schedule.every().hour.do(check_disk_space)
# Основной цикл
while True:
schedule.run_pending()
time.sleep(60)
Деплой Python-скриптов на VPS
Для развёртывания Python-скриптов на продакшн-сервере рекомендуется использовать VPS с достаточными ресурсами. Для более требовательных задач или высоконагруженных скриптов лучше рассмотреть выделенный сервер.
Создайте systemd-сервис для автоматического запуска скрипта:
# /etc/systemd/system/python-monitor.service
[Unit]
Description=Python System Monitor
After=network.target
[Service]
Type=simple
User=monitor
WorkingDirectory=/opt/python-scripts
ExecStart=/opt/python-scripts/venv/bin/python /opt/python-scripts/monitor.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Активация сервиса:
sudo systemctl daemon-reload
sudo systemctl enable python-monitor.service
sudo systemctl start python-monitor.service
sudo systemctl status python-monitor.service
Интересные факты и нестандартные применения
Python может использоваться для неожиданных задач в системном администрировании:
- Создание HTTP-сервера одной командой:
python3 -m http.server 8000
- Генерация SSL-сертификатов с помощью библиотеки
cryptography
- Создание простых API для управления сервером с помощью Flask
- Автоматическая генерация конфигурационных файлов с использованием шаблонов Jinja2
- Интеграция с облачными провайдерами через официальные SDK
Пример создания простого API для управления сервером:
from flask import Flask, jsonify
import psutil
import subprocess
app = Flask(__name__)
@app.route('/status')
def server_status():
"""Возвращает статус сервера"""
return jsonify({
'cpu_percent': psutil.cpu_percent(),
'memory_percent': psutil.virtual_memory().percent,
'disk_usage': psutil.disk_usage('/').percent
})
@app.route('/restart/
def restart_service(service):
"""Перезапускает системную службу"""
try:
subprocess.run(['systemctl', 'restart', service], check=True)
return jsonify({'status': 'success', 'message': f'Service {service} restarted'})
except subprocess.CalledProcessError:
return jsonify({'status': 'error', 'message': f'Failed to restart {service}'}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Отладка и профилирование
Для отладки Python-скриптов используйте встроенный отладчик:
import pdb
def problematic_function():
x = 10
y = 0
pdb.set_trace() # Точка останова
result = x / y # Здесь произойдёт ошибка
return result
Для профилирования производительности:
import cProfile
import pstats
def profile_function():
# Ваш код для профилирования
pass
# Запуск профилирования
cProfile.run('profile_function()', 'profile_stats')
# Анализ результатов
stats = pstats.Stats('profile_stats')
stats.sort_stats('cumulative')
stats.print_stats(10)
Полезные ресурсы и документация
Для дальнейшего изучения рекомендую следующие ресурсы:
- Официальная документация Python 3
- Python Package Index (PyPI) — каталог пакетов
- Awesome Python — курируемый список библиотек
- Real Python — качественные туториалы
Заключение и рекомендации
Python 3 — это мощный инструмент для системного администратора, который значительно упрощает автоматизацию рутинных задач. Начните с простых скриптов для мониторинга и постепенно расширяйте функциональность. Основные рекомендации:
- Всегда используйте виртуальные окружения для изоляции зависимостей
- Пишите читаемый код с комментариями — вы будете благодарны себе через полгода
- Используйте логирование вместо print() для продакшн-скриптов
- Изучите модуль
argparse
для создания CLI-утилит - Не забывайте про обработку ошибок и исключений
Python особенно эффективен для задач, требующих работы с API, парсинга данных, мониторинга системы и автоматизации деплоя. Начните с малого, и вскоре вы обнаружите, что Python стал незаменимым инструментом в вашем арсенале системного администратора.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.