Цитировать Цитировать POSIX shell специальные символы на выходе Python

Бывают случаи, когда я автоматически создаю небольшие сценарии оболочки из Python, и я хочу убедиться, что аргументы имени файла не содержат неэкранированных специальных символов. Я выполнил свое собственное решение, которое я дам в качестве ответа, но я почти уверен, что видел такую ​​функцию, потерянную где-то в стандартной библиотеке. Под «потерянным» я подразумеваю, что не нашел его в очевидном модуле, shlex как shlex , cmd или subprocess .

Вы знаете о такой функции в stdlib? Если да, то где это?

Даже отрицательный (но определенный и правильный ответ) будет принят.

2 Solutions collect form web for “Цитировать Цитировать POSIX shell специальные символы на выходе Python”

pipes.quote() :

 >>> from pipes import quote >>> quote("""some'horrible"string\with lots of junk!$$!""") '"some\'horrible\\"string\\\\with lots of junk!\\$\\$!"' 

Хотя обратите внимание, что у него, возможно, есть ошибка, где arg с нулевой длиной ничего не вернет:

 >>> quote("") '' 

Вероятно, было бы лучше, если бы оно вернулось.

Функция, которую я использую:

 def quote_filename(filename): return '"%s"' % ( filename .replace('\\', '\\\\') .replace('"', '\"') .replace('$', '\$') .replace('`', '\`') ) 

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

  • scrapy не может сканировать все ссылки на странице
  • Как сохранить интерактивную сессию Python?
  • Пропустить аргумент bash для скрипта python
  • Как заменить все символы «0xa0» на «» в связке текстовых файлов?
  • cd Терминал в заданном каталоге после запуска скрипта Python?
  • Знакомство с интерактивной оболочкой Django в PyDev
  • Отделите строку строк на отдельные строки
  • Как передать вызов подпроцесса в текстовый файл?
  • Python - лучший язык программирования в мире.