Что за зверь такой этот 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. С помощью него можно гибко настроить все что надо. Да, определенно, что-то я не понял и не дочитал, но для моих сфер применения этого пока достаточно.