Лого

Модуль sys

Что за зверь такой этот sys?

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

И зачем он?

Сначала чуть более официально ответим. Этот модуль полезен, когда нужно:

  • управлять работой интерпретатора Python
  • получать информацию о текущей ОС или версии Python
  • обрабатывать аргументы командной строки
  • управлять вводом, выводом и потоками ошибок
  • настраивать ограничения, например, глубину рекурсии

Для себя я могу выделить лишь некоторые пункты.

Получение аргументов командной строки через sys.argv

Это полезно в тех случаях, когда надо в программу передать путь к файлу. Или выбор режима работы программы, а также указание обработки данных

    
        import sys

        print(sys.argv)  # Выведет список аргументов
    

Пример запуска такого скрипта:

    
        python script.py file.txt
    

В ответ мы получаем список из аргументов:

    
        ['script.py', 'file.txt']
    

Первый элемент sys.argv[0] - это, собственно, сам скрипт, а вот за ним уже все файлы и параметры идут. Теперь давай глянем на другие примеры.

Передача пути к файлу

Допустим, у нас есть мегапрограмма, которая должна открывать, читать и выводить нам содержимое файлика. Напишем код:

    
        import sys

        if len(sys.argv) < 2:
            print("Ошибка: укажите путь к файлу!")
            sys.exit(1)  # Завершается выполнение скрипта

        file_path = sys.argv[1]

        try:
            with open(file_path, "r") as file:
                print(file.read())  # Читается и выводится содержимое файла
        except FileNotFoundError:
            print(f"Ошибка: файл '{file_path}' не найден!")
    

Сам запуск выглядит похож на тот, что смотрели выше:

    
        python script.py myfile.txt
    

Если файлик есть, то его содержимое выведется. Если нет - появится ошибка.

Выбор режима работы

Ок, допустим, мы сделали программу, которая шифрует и дешифрует текст. Для выбора нужного режима надо передать в программу либо encrypt, либо decrypt через аргументы. Вот такой примерно набросок можно накидать:

    
        import sys

        if len(sys.argv) < 3:
            print("Использование: python script.py encrypt|decrypt какой-то текст")
            sys.exit(1)

        mode = sys.argv[1]
        text = sys.argv[2]

        if mode == "encrypt":
            print(f"Зашифрованный текст: {text[::-1]}")  # переворачиваем строчку
        elif mode == "decrypt":
            print(f"Расшифрованный текст: {text[::-1]}")  # обратно переворачиваем текст
        else:
            print("Ошибка: неизвестный режим! Используйте encrypt или decrypt")
    

Теперь запустим нашу ракету:

    
        python script.py encrypt "hello"
    

В ответ получим вот такую штуку:

    
        Зашифрованный текст: olleh
    

Возвращаем нормальный вид:

    
        python script.py decrypt "olleh"
    

    
        Расшифрованный текст: hello
    

Здесь можно третий пример написать, который объединяет получение пути и шифрование / дешифрование данных производить. Но я этого делать не буду.

Заключение

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