Работа с интерпретатором Python в терминале Linux

Раздел: Администрирование -> Работа с консолью

Основные подходы к работе с Python в консоли Linux

Как наиболее эффективно запускать Python скрипты в консоли?

Оптимальный способ для администрирования - создание автономного скрипта с шебангом (shebang) и запуск его как исполняемого файла. Это позволяет избежать ручного вызова интерпретатора и упрощает интеграцию с cron, systemd и другими инструментами.


#!/usr/bin/env python3
# скрипт system_info.py
import os, platform
print("Система:", platform.system())
print("Хост:", platform.node())
print("Ядро:", os.uname().release)
    

Python linux консоль (работа с python в linux консоли)

После сохранения файла нужно дать права на исполнение:

chmod +x system_info.py
./system_info.py

Python открыть консоль (открытие консоли python)

Система: Linux
Хост: server01
Ядро: 5.15.0-91-generic

Типичная ошибка: если первая строка не содержит правильный путь к Python, появляется ошибка bad interpreter. Решение - использовать #!/usr/bin/env python3, что обеспечивает поиск интерпретатора в окружении.

Ещё одна проблема - файл не в кодировке UTF-8. Это вызывает ошибки при выводе кириллицы. Рекомендуется добавлять # -*- coding: utf-8 -*-.

Как выполнить код Python без создания файла?

Для быстрых одноразовых задач используйте флаг -c. Команда python3 -c 'print("Hello")' выполняет код прямо в команде. Применяется при тестировании, работе с конвейерами (pipes) или в скриптах оболочки.

python3 -c 'import sys; print(sys.executable)'
/usr/bin/python3

Как запустить модуль как скрипт?

Флаг -m позволяет запустить любой модуль из стандартной библиотеки или установленного пакета. Например, python3 -m http.server запускает простой HTTP-сервер. Это полезно для быстрого просмотра файлов или отладки.

python3 -m venv my_env

Создаёт виртуальное окружение без вызова отдельного скрипта.

Как работать в интерактивной среде?

Команда python3 без аргументов открывает REPL (Read-Eval-Print Loop). Администраторы используют её для тестирования импорта, проверки версий библиотек или отладки однострочных алгоритмов. Для выхода - exit() или Ctrl+D.

python3
>>> import shutil
>>> shutil.which('vim')
'/usr/bin/vim'

Как изолировать зависимости проекта?

Виртуальные окружения (venv) необходимы, чтобы не засорять системный Python. Создание:

python3 -m venv .venv
source .venv/bin/activate

После активации все установки пакетов (pip install) попадают только в эту среду. Типичная ошибка - забыть активировать окружение, что приводит к конфликтам версий.

Как использовать IPython вместо стандартного REPL?

IPython предоставляет автодополнение, историю команд, магические функции. Установка: pip install ipython. Запуск: ipython. Позволяет выполнять shell-команды через !, например !ls -la.

Проблема: IPython может отсутствовать в минимальных установках. Решение - использовать стандартный REPL или установить его через пакетный менеджер дистрибутива (apt install ipython3).

Расширенные примеры для административных задач.

Парсинг аргументов командной строки с argparse

Скрипт для мониторинга дискового пространства с опциональным порогом.

Пример

#!/usr/bin/env python3
# disk_usage.py
import argparse
import shutil

def main():
    parser = argparse.ArgumentParser(description='Проверка дискового пространства')
    parser.add_argument('-t', '--threshold', type=int, default=80, help='Порог заполнения в процентах')
    parser.add_argument('-p', '--path', default='/', help='Путь для проверки')
    args = parser.parse_args()
    usage = shutil.disk_usage(args.path)
    percent = usage.used / usage.total * 100
    if percent > args.threshold:
        print(f"ALERT: {args.path} заполнен на {percent:.1f}% (порог {args.threshold}%)")
    else:
        print(f"OK: {args.path} заполнен на {percent:.1f}%")

if __name__ == '__main__':
    main()

Запуск ./disk_usage.py -t 90 -p /home выводит предупреждение только при превышении 90%.

OK: /home заполнен на 67.3%

Выполнение системных команд с subprocess

Скрипт для получения списка запущенных процессов, принадлежащих конкретному пользователю.

Пример

#!/usr/bin/env python3
import subprocess
import sys

def get_processes(user):
    try:
        result = subprocess.run(['ps', '-u', user, '-o', 'pid,cmd'], capture_output=True, text=True, check=True)
        return result.stdout
    except subprocess.CalledProcessError as e:
        print(f"Ошибка: {e}", file=sys.stderr)
        return None

if __name__ == '__main__':
    user = sys.argv[1] if len(sys.argv) > 1 else 'root'
    output = get_processes(user)
    if output:
        print(f"Процессы пользователя {user}:")
        print(output)
Пример
python3 ps_user.py admin
Процессы пользователя admin:
  PID CMD
 2345 /usr/bin/python3 ps_user.py
 6789 nginx: worker process

Работа с файловой системой: рекурсивный поиск больших файлов

Пример использования os.walk для поиска файлов больше заданного размера. Такой скрипт пригодится при очистке диска.

Пример

#!/usr/bin/env python3
import os
import sys

def find_large_files(directory, size_limit_mb=100):
    size_limit = size_limit_mb * 1024 * 1024
    for root, dirs, files in os.walk(directory):
        for name in files:
            try:
                path = os.path.join(root, name)
                st = os.stat(path)
                if st.st_size > size_limit:
                    yield path, st.st_size
            except PermissionError:
                continue

if __name__ == '__main__':
    start_dir = sys.argv[1] if len(sys.argv) > 1 else '.'
    for path, size in find_large_files(start_dir, 50):
        print(f"{path} - {size / (1024*1024):.2f} MB")
Пример
python3 bigfiles.py /var/log
/var/log/syslog - 102.34 MB
/var/log/kern.log.1 - 55.20 MB

Использование виртуального окружения с автоматической установкой зависимостей

Создание скрипта, который при первом запуске проверяет наличие окружения и устанавливает пакеты из requirements.txt.

Пример

#!/usr/bin/env python3
import os
import sys
import subprocess

venv_path = '.venv'
requirements = 'requirements.txt'

def ensure_venv():
    if not os.path.isdir(venv_path):
        subprocess.run([sys.executable, '-m', 'venv', venv_path], check=True)
        print("Виртуальное окружение создано.")
    # активация не требуется, используем pip из venv
    pip_path = os.path.join(venv_path, 'bin', 'pip')
    if os.path.isfile(requirements):
        subprocess.run([pip_path, 'install', '-r', requirements], check=True)
        print("Пакеты установлены.")

if __name__ == '__main__':
    ensure_venv()
    # далее код, который использует эти пакеты
    print("Окружение готово.")

При первом запуске скрипт создает виртуальное окружение и устанавливает зависимости, при последующих - проверяет их наличие.

Интерактивная настройка через REPL: запрос к API и парсинг JSON

Пример, как администратор может быстро протестировать эндпоинт, не выходя из консоли.

Пример

python3
>>> import requests, json
>>> r = requests.get('https://api.github.com/repos/python/cpython')
>>> data = r.json()
>>> print(data['stargazers_count'])
61800
>>> exit()

Для этого модуль requests должен быть установлен (в системном Python или через pip). Если не установлен, появится ModuleNotFoundError.

Решение проблемы: установка пакета pip install requests (возможно с sudo, если окружение системное). Рекомендуется использовать виртуальное окружение, чтобы не влиять на системные пакеты.

Работа с Python в Linux консоли - comments

En
Python linux консоль (python)