Модуль Python для shellquote / unshellquote? [Дубликат]

Если некоторые из вас сталкиваются с этой проблемой с помощью facebook-connent-plugin для phonegap

, попробуйте удалить файлы в каталоге bin / class / com / facebook / android! -> и перестроить

30
задан Zero Piraeus 26 January 2015 в 08:59
поделиться

3 ответа

Вы никогда не должны использовать кавычки оболочки. Правильный способ выполнения команды - не использовать кавычки оболочки, а вместо этого использовать subprocess.call или subprocess.Popen и передать список аргументов без кавычек. Это невосприимчиво к расширению оболочки.

т.е.

subprocess.Popen(['echo', '"', '$foo'], shell=False)

Если вы хотите убрать кавычки с данных оболочки, вы можете использовать shlex.shlex следующим образом:

list(shlex.shlex("hello stack 'overflow'\''s' quite cool"))
2
ответ дан 27 November 2019 в 20:42
поделиться

Похоже,

try:  # py3
    from shlex import quote
except ImportError:  # py2
    from pipes import quote

quote("hello stack overflow's quite cool")
>>> '"hello stack overflow\'s quite cool"'

уводит меня достаточно далеко.

29
ответ дан 27 November 2019 в 20:42
поделиться

Я почти уверен, что pipe.quote поврежден и не должен использоваться, потому что он неправильно обрабатывает аргументы нулевой длины:

>>> from pipes import quote
>>> args = ['arg1', '', 'arg3']
>>> print 'mycommand %s' % (' '.join(quote(arg) for arg in args))
mycommand arg1  arg3

Я считаю, что результат должен быть примерно таким

mycommand arg1 '' arg3
6
ответ дан 27 November 2019 в 20:42
поделиться
Другие вопросы по тегам:

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