Цитировать специальные символы оболочки POSIX в выводе Python - PullRequest
6 голосов
/ 22 апреля 2010

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

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

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

Ответы [ 2 ]

6 голосов
/ 22 апреля 2010

pipes.quote():

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

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

>>> quote("")
''

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

1 голос
/ 22 апреля 2010

Используемая мной функция:

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

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

...