Spec-Zone.ru › Python 2.7

pipes — Интерфейс к командным конвейерам оболочки

Исходный код: Lib/pipes.py

Модуль pipes определяет класс для абстрагирования понятия конвейера — последовательности преобразователей из одного файла в другой.

Поскольку модуль использует командные строки /bin/sh, требуется оболочка POSIX или совместимая с ней для os.system() и os.popen().

class pipes.Template

Абстракция конвейера.

Пример:

>>> import pipes
>>> t = pipes.Template()
>>> t.append('tr a-z A-Z', '--')
>>> f = t.open('pipefile', 'w')
>>> f.write('hello world')
>>> f.close()
>>> open('pipefile').read()
'HELLO WORLD'
pipes.quote(s)

Устарело начиная с версии 2.7: До Python 2.7 эта функция не была публично документирована. Она наконец-то была публично экспонирована в Python 3.3 как функция quote в модуле shlex.

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

Этот идиом был бы небезопасным:

>>> filename = 'somefile; rm -rf ~'
>>> command = 'ls -l {}'.format(filename)
>>> print command  # executed by a shell: boom!
ls -l somefile; rm -rf ~

quote() позволяет устранить брешь в безопасности:

>>> command = 'ls -l {}'.format(quote(filename))
>>> print command
ls -l 'somefile; rm -rf ~'
>>> remote_command = 'ssh home {}'.format(quote(command))
>>> print remote_command
ssh home 'ls -l '"'"'somefile; rm -rf ~'"'"''

Экранирование совместимо с оболочками UNIX и с shlex.split():

>>> remote_command = shlex.split(remote_command)
>>> remote_command
['ssh', 'home', "ls -l 'somefile; rm -rf ~'"]
>>> command = shlex.split(remote_command[-1])
>>> command
['ls', '-l', 'somefile; rm -rf ~']

1. Объекты шаблона

Объекты шаблона поддерживают следующие методы:

Template.reset()

Восстанавливает шаблон конвейера до его начального состояния.

Template.clone()

Возвращает новый, эквивалентный шаблон конвейера.

Template.debug(flag)

Если flag истинно, включить отладку. В противном случае, отключить отладку. При включенной отладке выполняемые команды выводятся на экран, и оболочке дается set -x команда для большей подробности.

Template.append(cmd, kind)

Добавляет новое действие в конец. Переменная cmd должна быть валидной командой оболочки bourne. Переменная kind состоит из двух букв.

Первая буква может быть либо '-' (что означает, что команда считывает стандартный ввод), либо 'f' (что означает, что команда считывает заданный файл в командной строке), либо '.' (что означает, что команда не считывает никакого ввода, и, следовательно, должна быть первой).

Аналогично, вторая буква может быть либо '-' (что означает, что команда записывает в стандартный вывод), либо 'f' (что означает, что команда записывает файл в командной строке), либо '.' (что означает, что команда ничего не записывает, и, следовательно, должна быть последней).

Template.prepend(cmd, kind)

Добавляет новое действие в начало. См. append() для объяснений аргументов.

Template.open(file, mode)

Возвращает объектоподобный файл, открытый для file, но читающий или записывающий в конвейер. Обратите внимание, что только один из 'r', 'w' может быть задан.

Template.copy(infile, outfile)

Копирует infile в outfile через конвейер.

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/pipes.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API