Home » Как написать свою первую программу на Python 3
Как написать свою первую программу на Python 3

Как написать свою первую программу на 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 — это мощный инструмент для системного администратора, который значительно упрощает автоматизацию рутинных задач. Начните с простых скриптов для мониторинга и постепенно расширяйте функциональность. Основные рекомендации:

  • Всегда используйте виртуальные окружения для изоляции зависимостей
  • Пишите читаемый код с комментариями — вы будете благодарны себе через полгода
  • Используйте логирование вместо print() для продакшн-скриптов
  • Изучите модуль argparse для создания CLI-утилит
  • Не забывайте про обработку ошибок и исключений

Python особенно эффективен для задач, требующих работы с API, парсинга данных, мониторинга системы и автоматизации деплоя. Начните с малого, и вскоре вы обнаружите, что Python стал незаменимым инструментом в вашем арсенале системного администратора.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked