Экранирование аргументов команды в вызовах 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