Заключите специальные символы оболочки POSIX в кавычки в выводе Python

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

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

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

6
задан tzot 22 April 2010 в 17:14
поделиться

2 ответа

pipe.quote () :

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

Обратите внимание, что в нем, возможно, есть ошибка, из-за которой аргумент нулевой длины ничего не возвращает:

>>> quote("")
''

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

6
ответ дан 17 December 2019 в 00:06
поделиться

Я использую следующую функцию:

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

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

1
ответ дан 17 December 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: