Python 3: от написания до запуска скрипта
Введение в создание скриптов Python
Скрипт на Python представляет собой текстовый файл с расширением .py, содержащий программный код. Для его выполнения необходим установленный интерпретатор Python 3. Рассмотрим основные подходы к созданию и запуску скриптов.
Базовый способ: написание и запуск через командную строку
Как создать скрипт и выполнить его?
Файл с расширением .py, например script.py, создаётся в любом текстовом редакторе. В него записывается простой код:
print("Привет, мир!")как запустить скрипт python в windows (выполнение скриптов python)
Затем в терминале выполняется команда:
python3 script.pyPython готовый скрипт (примеры скриптов python)
На экране появляется строка Привет, мир!
Возможные проблемы: Команда python3 может отсутствовать, если Python 3 не установлен или установлен под именем python. Проверка версии интерпретатора выполняется командами python --version или python3 --version. Если на системе установлен только Python 2, скрипты Python 3 не запустятся. Решение: установить Python 3 с официального сайта или через пакетный менеджер.
Как сделать скрипт исполняемым в Unix-подобных системах?
В первую строку файла добавляется shebang: #!/usr/bin/env python3. Затем устанавливается разрешение на выполнение: chmod +x script.py. После этого скрипт можно запускать напрямую: ./script.py.
#!/usr/bin/env python3\nprint("Запуск без явного вызова python3")Python папка скрипта (работа со скриптами python)
Цель: упрощение запуска, особенно для повторных выполнений. Используется в автоматизации и скриптах командной строки.
Ошибка: если первая строка содержит ошибку в пути к интерпретатору, система выдаст сообщение 'bad interpreter'. Следует убедиться, что python3 находится в PATH. В Windows эта техника не работает напрямую, но можно использовать ассоциацию файлов.
Как передать параметры в скрипт при запуске?
Модуль sys предоставляет список argv, содержащий имя скрипта и переданные аргументы. Например, файл greet.py:
import sys\nif len(sys.argv) > 1:\n name = sys.argv[1]\n print(f"Привет, {name}!")\nelse:\n print("Привет, мир!")Python 3 скрипты (создание скриптов на python)
Запуск: python3 greet.py Алексей выведет Привет, Алексей!
Цель: создание гибких скриптов, реагирующих на внешние данные. Удобно для утилит командной строки.
Частая ошибка: необработанный IndexError при отсутствии аргументов. Всегда проверяется длина списка argv.
Как создать скрипт с поддержкой именованных аргументов и флагов?
Модуль argparse позволяет определить аргументы, их типы, значения по умолчанию и справку. Пример:
import argparse\nparser = argparse.ArgumentParser(description='Приветствие пользователя')\nparser.add_argument('--name', default='мир', help='Имя для приветствия')\nparser.add_argument('--count', type=int, default=1, help='Количество повторений')\nargs = parser.parse_args()\nfor _ in range(args.count):\n print(f"Привет, {args.name}!")Запуск: python3 greet.py --name Анна --count 3 выведет три строки.
Цель: создание профессиональных интерфейсов командной строки с автоматической генерацией помощи.
Проблемы: неправильное указание типа может привести к ошибке преобразования. Используется параметр type. Справка выводится при --help.
Как организовать скрипт для повторного использования функций в других модулях?
Основной код помещается внутрь условия if __name__ == '__main__':. Это позволяет выполнять код только при запуске файла как основного скрипта. При импортировании модуля код не выполняется, а функции остаются доступны.
def greet(name):\n return f"Привет, {name}!"\nif __name__ == '__main__':\n import sys\n name = sys.argv[1] if len(sys.argv) > 1 else 'мир'\n print(greet(name))Цель: разделение логики и точки входа, возможность импортировать функции в другие скрипты. Широко используется в больших проектах.
Ошибка: если забыто это условие, код будет выполняться при каждом импорте, что может вызвать неожиданные побочные эффекты.
Как обрабатывать файлы в скрипте Python?
Для чтения и записи файлов используется встроенная функция open. Пример программы, читающей файл и выводящей количество строк:
import sys\nif len(sys.argv) < 2:\n print("Укажите имя файла")\n sys.exit(1)\nfilename = sys.argv[1]\ntry:\n with open(filename, 'r', encoding='utf-8') as f:\n lines = f.readlines()\n print(f"Файл {filename} содержит {len(lines)} строк.")\nexcept FileNotFoundError:\n print(f"Файл {filename} не найден.")Цель: автоматизация обработки текстовых данных, логирования, генерации отчетов.
Типичные ошибки: забыт режим (например, 'w' вместо 'r'), неправильная кодировка (по умолчанию зависит от системы). Рекомендуется явно указывать encoding='utf-8'.
Расширенные примеры создания скриптов
Пример 1: Скрипт для подсчёта частоты слов в текстовом файле.
#!/usr/bin/env python3\nimport sys\nimport string\nfrom collections import Counter\n\ndef get_word_frequency(filename, top_n=10):\n try:\n with open(filename, 'r', encoding='utf-8') as f:\n text = f.read().lower()\n # Удаление знаков препинания\n text = text.translate(str.maketrans('', '', string.punctuation))\n words = text.split()\n counter = Counter(words)\n return counter.most_common(top_n)\n except FileNotFoundError:\n print(f"Ошибка: файл '{filename}' не найден.")\n return None\n\nif __name__ == '__main__':\n import argparse\n parser = argparse.ArgumentParser(description='Анализ частоты слов в файле')\n parser.add_argument('file', help='Путь к текстовому файлу')\n parser.add_argument('--top', type=int, default=10, help='Количество наиболее частых слов')\n args = parser.parse_args()\n result = get_word_frequency(args.file, args.top)\n if result:\n print(f"Топ {args.top} слов в файле '{args.file}':")\n for word, count in result:\n print(f" {word}: {count}")Результат выполнения для файла example.txt с содержимым 'hello world hello python world python python':
Топ 10 слов в файле 'example.txt':\n python: 3\n world: 2\n hello: 2
Пояснение: скрипт использует shebang, argparse, функцию с возвратом, обработку исключений. Counter удобен для подсчёта.
Пример 2: Скрипт для генерации резервной копии директории с архивацией.
#!/usr/bin/env python3\nimport os\nimport sys\nimport shutil\nimport datetime\nimport argparse\n\ndef backup_dir(source, dest):\n if not os.path.isdir(source):\n print(f"Ошибка: исходная директория '{source}' не существует.")\n sys.exit(1)\n timestamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')\n backup_name = f"{os.path.basename(source)}_backup_{timestamp}"\n backup_path = os.path.join(dest, backup_name)\n try:\n shutil.copytree(source, backup_path, symlinks=True, ignore_dangling_symlinks=True)\n # Создание архива (zip)\n shutil.make_archive(backup_path, 'zip', backup_path)\n # Удаление неархивированной копии (опционально)\n shutil.rmtree(backup_path)\n print(f"Резервная копия создана: {backup_path}.zip")\n except Exception as e:\n print(f"Ошибка при создании резервной копии: {e}")\n\nif __name__ == '__main__':\n parser = argparse.ArgumentParser(description='Создание резервной копии папки')\n parser.add_argument('source', help='Путь к копируемой папке')\n parser.add_argument('dest', help='Путь для сохранения резервной копии')\n args = parser.parse_args()\n backup_dir(args.source, args.dest)Результат: в папке назначения появляется zip-архив с именем папки и временной меткой.
Пример 3: Скрипт для работы с виртуальным окружением и установкой зависимостей.
#!/usr/bin/env python3\nimport subprocess\nimport sys\nimport os\n\ndef create_venv_and_install(project_dir, requirements_file):\n if not os.path.isdir(project_dir):\n print(f"Директория {project_dir} не найдена.")\n sys.exit(1)\n venv_path = os.path.join(project_dir, 'venv')\n if not os.path.isdir(venv_path):\n print("Создание виртуального окружения...")\n subprocess.run([sys.executable, '-m', 'venv', venv_path], check=True)\n pip = os.path.join(venv_path, 'bin', 'pip')\n if not os.path.exists(pip):\n pip = os.path.join(venv_path, 'Scripts', 'pip.exe') # для Windows\n print("Установка зависимостей...")\n subprocess.run([pip, 'install', '-r', requirements_file], check=True)\n print("Готово.")\n\nif __name__ == '__main__':\n import argparse\n parser = argparse.ArgumentParser()\n parser.add_argument('project', help='Путь к проекту')\n parser.add_argument('--requirements', default='requirements.txt', help='Файл с зависимостями')\n args = parser.parse_args()\n create_venv_and_install(args.project, args.requirements)Этот скрипт автоматизирует создание изолированной среды и установку пакетов, что полезно для воспроизводимости.