Как выйти из os.system () вызовы?

Они выглядят одинаково ... Документация из функции click () :

Этот метод является ярлыком для .bind ('click', обработчик)

blockquote>

Документация из функции on () :

Как и в jQuery 1.7, метод .on () обеспечивает все функции, необходимые для прикрепления обработчиков событий. Для получения помощи в преобразовании из старых методов событий jQuery см. .Bind (), .delegate () и .live (). Чтобы удалить события, связанные с .on (), см. .Off ().

blockquote>

114
задан martineau 17 December 2017 в 15:26
поделиться

6 ответов

Это - то, что я использую:

def shellquote(s):
    return "'" + s.replace("'", "'\\''") + "'"

оболочка будет всегда принимать заключенное в кавычки имя файла и удалять окружающие кавычки прежде, чем передать его рассматриваемой программе. В частности, это избегает проблем с именами файлов, которые содержат пробелы или любой другой вид противного метасимвола оболочки.

Обновление : при использовании Python 3.3 или позже используйте shlex.quote вместо того, чтобы прокрутить собственное.

77
ответ дан offby1 24 November 2019 в 02:31
поделиться

Возможно, у Вас есть определенная причина использования os.system(). Но если не необходимо, вероятно, использовать subprocess модуль . Можно определить каналы непосредственно и избегать использования оболочки.

следующее от PEP324:

Replacing shell pipe line
-------------------------

output=`dmesg | grep hda`
==>
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
57
ответ дан Larivact 24 November 2019 в 02:31
поделиться

Я полагаю, что os.system просто вызывает любой командный процессор, настроен для пользователя, таким образом, я не думаю, что можно сделать это независимым от платформы способом. Мой командный процессор мог быть чем-либо от удара, emacs, рубина, или даже quake3. Некоторые из этих программ не ожидают вид аргументов, Вы являетесь передающими им и даже если они сделали нет никакой гарантии, они делают свой выход из того же пути.

3
ответ дан pauldoo 24 November 2019 в 02:31
поделиться

Если бы Вы действительно используете системную команду, я попытался бы добавить в белый список то, что входит в os.system () вызов.. Например..

clean_user_input re.sub("[^a-zA-Z]", "", user_input)
os.system("ls %s" % (clean_user_input))

модуль подпроцесса является более оптимальным вариантом, и я рекомендовал бы не использовать что-либо как os.system/subprocess по мере возможности.

-3
ответ дан dbr 24 November 2019 в 02:31
поделиться

shlex.quote () делает то, что вы хотите, начиная с python 3.

(Используйте pipe.quote для поддержки как python 2, так и python 3)

151
ответ дан 24 November 2019 в 02:31
поделиться

Обратите внимание, что pipe.quote фактически нарушен в Python 2.5 и Python 3.1 и небезопасен в использовании - он не обрабатывает аргументы нулевой длины.

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

См. Проблема Python 7476 ; это было исправлено в Python 2.6 и 3.2 и новее.

6
ответ дан 24 November 2019 в 02:31
поделиться
Другие вопросы по тегам:

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