Основы работы с интерпретатором Python через консоль
Способы запуска Python в Linux
Какой способ считается базовым для выполнения скрипта Python?
Наиболее прямой метод - вызвать интерпретатор python3 с именем файла. Например, для скрипта hello.py с содержимым:
print('Привет, мир!')Python run app py (запуск приложения python)
команда запуска:
python3 hello.pyPython через командную строку (запуск python из командной строки в linux)
Результат:
Привет, мир!
Интерпретатор читает код и выполняет его. Этот подход не требует прав на исполнение и работает с любым файлом .py. Для Python 2 используется команда python, но в современных системах лучше применять python3.
Типичные проблемы:
- python3: command not found - Python 3 отсутствует в системе или не добавлен в PATH. Установка:
sudo apt install python3(Debian/Ubuntu) илиsudo yum install python3(CentOS). - SyntaxError - ошибка в синтаксисе. Нужно проверить код на отсутствие лишних символов и правильные отступы.
- ModuleNotFoundError - не установлен необходимый модуль. Установка через
pip3 install <module>.
Как выполнять Python код построчно, не создавая файл?
Интерактивная оболочка позволяет вводить команды и сразу видеть результат. Запускается командой:
python3
Пример сеанса:
>>> name = 'Иван'
>>> print(f'Привет, {name}!')
Привет, Иван!
>>> 10 ** 2
100
Выход - exit() или Ctrl+D. Этот режим удобен для тестирования небольших фрагментов и изучения библиотек.
Проблема: введённые данные не сохраняются. Если нужно повторное использование, следует оформить код в файл.
Как превратить скрипт в исполняемую программу?
Добавление shebang и установка прав на выполнение позволяют запускать скрипт как ./script.py (или просто script.py при наличии в PATH). Пример файла run.sh (содержимое):
#!/usr/bin/env python3
print('Скрипт запущен как программа')
Команды для подготовки:
chmod +x run.sh
./run.sh
Результат:
Скрипт запущен как программа
Shebang #!/usr/bin/env python3 находит Python в окружении, что делает скрипт переносимым. Расширение файла может быть любым, но традиционно используется .py.
Типичные ошибки:
- Permission denied - забыли выполнить
chmod +x. - bad interpreter - путь к Python в shebang неверен. Рекомендуется использовать
#!/usr/bin/env python3.
Как запустить встроенный модуль Python, например веб-сервер?
Флаг -m позволяет выполнить модуль как скрипт. Пример запуска модуля http.server в текущей директории на порту 8000:
python3 -m http.server 8000
После запуска браузер может открыть http://localhost:8000. Модуль работает, пока не будет прерван (Ctrl+C). Другие распространённые модули: venv, pip, json.tool. Например, форматирование JSON-строки:
echo '{"a":1}' | python3 -m json.tool
{
"a": 1
}
Флаг -m ищет модуль в стандартных путях и выполняет его.
Ошибка: No module named ... - модуль не установлен. Для сторонних модулей требуется предварительная установка через pip.
Как передать данные скрипту при его запуске?
Аргументы командной строки передаются после имени файла и доступны в sys.argv. Пример скрипта greet.py:
import sys
if len(sys.argv) > 1:
print(f'Привет, {sys.argv[1]}!')
else:
print('Аргументы не заданы')
Запуск с именем:
python3 greet.py Алексей
Привет, Алексей!
Без аргументов:
python3 greet.py
Аргументы не заданы
Первый элемент sys.argv[0] содержит имя скрипта. Для сложного парсинга используется модуль argparse.
Проблема: если аргументов больше одного, их нужно обрабатывать по индексам, что неудобно для опций - лучше использовать argparse.
Как перенаправить вывод Python скрипта в файл или использовать файл как входные данные?
Стандартные средства bash позволяют управлять потоками. Запись вывода в файл:
python3 script.py > output.txt
Чтение входных данных из файла:
python3 script.py < input.txt
Объединение (фильтр):
python3 filter.py < data.log > result.log
Конвейер (pipe) для передачи вывода одной программы на вход другой:
cat log.txt | python3 parser.py | head -5
В Python скрипте доступ к stdin, stdout даётся через sys.stdin, sys.stdout.
Ошибка: если скрипт ожидает ввод с клавиатуры, а перенаправление из файла не даёт данных - нужно проверить имя файла и права доступа.
Как запустить Python скрипт в фоновом режиме, чтобы он продолжал работу после закрытия терминала?
Для фонового выполнения используется символ & в конце команды. Дополнительно, чтобы скрипт не зависел от сессии, применяется nohup или disown. Пример:
nohup python3 long_script.py &
Вывод перенаправляется в файл nohup.out по умолчанию. Можно явно указать:
nohup python3 long_script.py > mylog.log 2>&1 &
Для остановки фонового процесса используется команда kill с PID, который можно узнать через jobs или ps.
Проблема: при использовании только & после закрытия терминала процесс может прерваться (SIGHUP). nohup игнорирует этот сигнал. Также важно перенаправлять stderr вместе с stdout, чтобы видеть ошибки.
Как изолировать зависимости скрипта с помощью виртуального окружения?
Виртуальное окружение позволяет установить пакеты, не затрагивая системный Python. Создание окружения:
python3 -m venv myenv
Активация окружения (запускает новый shell с отдельным Python и pip):
source myenv/bin/activate
После активации можно запускать скрипты, которые используют пакеты из этого окружения:
python script.py
Деактивация - командой deactivate. Для запуска без активации используется полный путь к интерпретатору:
./myenv/bin/python script.py
Также можно использовать pip install для установки зависимостей.
Ошибки
- bash: venv: command not found - модуль venv отсутствует (редко, обычно есть).
- ImportError - пакет установлен в другом окружении или глобально, но не в текущем.
Как выполнить короткий Python код прямо в командной строке без файла?
Флаг -c позволяет передать код как строку. Пример:
python3 -c "print('Hello from -c')"
Hello from -c
Также можно использовать кавычки для многострочного кода (через \n):
python3 -c "import math; print(math.sqrt(16))"
4.0
Это удобно для быстрых расчётов или встраивания Python в shell скрипты.
Проблема: сложный код трудно читать и отлаживать. Для больших конструкций лучше использовать файл.
Продвинутые примеры запуска Python
Пример 1. Запуск с оптимизацией (флаг -O). Скрипт содержит assert, который игнорируется при оптимизации.
# test_opt.py
x = 1
assert x == 0, 'x не равен 0'
print('Пройдено')
Запуск без оптимизации вызывает ошибку:
python3 test_opt.py
Traceback (most recent call last):
File "test_opt.py", line 3, in <module>
assert x == 0, 'x не равен 0'
AssertionError: x не равен 0
Запуск с флагом -O:
python3 -O test_opt.py
Пройдено
Пример 2. Использование screen для управления долгими процессами.
Создание сессии:
screen -S mypythonsession python3 long_running.py
После запуска можно открепиться от сессии (Ctrl+A, затем D). Вернуться позже:
screen -r mypythonsession
Сессия продолжает работу даже после отключения от терминала.
Пример 3. Переменная окружения PYTHONPATH для добавления путей поиска модулей.
PYTHONPATH=/home/user/custom_libs python3 script.py
Интерпретатор будет искать модули также в указанной директории. Это удобно для тестирования без установки.
Пример 4. Однострочный Python фильтр через stdin.
Подсчёт строк во входном потоке:
cat somefile.txt | python3 -c 'import sys; print(sum(1 for _ in sys.stdin))'
Результат: количество строк в файле.
Пример 5. Профилирование выполнения скрипта с помощью модуля cProfile.
python3 -m cProfile myscript.py
Вывод содержит статистику вызовов функций, время выполнения, количество вызовов.
Пример 6. Открепление фонового процесса от терминала с помощью disown.
python3 daemon.py &
disown %1
Процесс продолжит работу после выхода из оболочки (в отличие от простого &).