Работа с интерпретатором 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.pyPython открыть консоль (открытие консоли 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, если окружение системное). Рекомендуется использовать виртуальное окружение, чтобы не влиять на системные пакеты.