«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как правильно экранировать аргументы команды в вызовах `os.system()` Python?

Как правильно экранировать аргументы команды в вызовах `os.system()` Python?

Опубликовано 2 ноября 2024 г.
Просматривать:626

How to Properly Escape Command Arguments in Python\'s `os.system()` Calls?

Экранирование аргументов команды в вызовах os.system()

При работе с os.system() в Python необходимо обеспечить правильную обработку аргументов ключевой. Файлы и другие параметры часто требуют экранирования, чтобы предотвратить вмешательство в команды оболочки. Вот подробное руководство по эффективному экранированию аргументов для различных операционных систем и оболочек, в частности bash:

Использование кавычек

Простейшее решение — заключать аргументы в кавычки. Одинарные кавычки (') предотвращают раскрытие оболочки, а двойные кавычки ("") допускают замену переменных, но подавляют раскрытие переменных внутри строки в кавычках. Этот подход широко поддерживается на различных платформах и оболочках, включая bash:

os.system("cat '%s' | grep something | sort > '%s'" 
          % (in_filename, out_filename))

Использование модуля shlex

Python предоставляет модуль shlex, специально разработанный для этой цели. Его функция quote() правильно экранирует строки для использования в оболочках POSIX, включая bash:

import shlex

escaped_in_filename = shlex.quote(in_filename)
escaped_out_filename = shlex.quote(out_filename)
os.system("cat {} | grep something | sort > {}".format(
          escaped_in_filename, escaped_out_filename))

Использование модуля Pipes (Предупреждение об устаревании!)

Для версий Python от 2.x и 3.x до 3.10, Pipes.quote из Модуль устаревших каналов можно использовать как альтернативу shlex.quote. Имейте в виду, что, начиная с Python 3.11, каналы помечены для удаления:

from pipes import quote

escaped_in_filename = quote(in_filename)
escaped_out_filename = quote(out_filename)
os.system("cat {} | grep something | sort > {}".format(
          escaped_in_filename, escaped_out_filename))

Как правило, по соображениям безопасности вводимые пользователем данные не следует напрямую подключать к системным вызовам без надлежащей проверки и очистки.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3