Содержание страницы
36.11. pipes – Интерфейс к конвейерам оболочки¶pipes – Interface to shell pipelines
Исходный код: 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 # выполнено оболочкой: бабах! 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 ~']
36.11.1. Объекты Template¶Template Objects
У объектов Template есть следующие методы:
-
Template.reset()¶ Восстанавливает шаблон конвейера в исходное состояние.
-
Template.clone()¶ Возвращает новый эквивалентный шаблон конвейера.
-
Template.debug(flag)¶ Если flag равен true, включить отладку. В противном случае выключить. Когда отладка включена, выводится список команд, которые будут выполнены, а оболочке передаётся команда
set -xдля более подробного вывода.
-
Template.append(cmd, kind)¶ Добавляет новое действие в конец. Переменная cmd должна быть корректной командой Bourne shell. Переменная kind состоит из двух букв.
Первая буква может быть либо
'-'(команда читает свой стандартный ввод),'f'(команда читает указанный файл из командной строки) или'.'(команда не читает никаких данных, поэтому должна быть первой).Аналогично, вторая буква может быть либо
'-'(команда пишет в стандартный вывод),'f'(команда пишет в файл, указанный в командной строке) или'.'(команда ничего не пишет, поэтому должна быть последней).
-
Template.prepend(cmd, kind)¶ Добавляет новое действие в начало. См.
append()для объяснения аргументов.
-
Template.open(file, mode)¶ Возвращает файлоподобный объект, открытый для file, но данные читаются из конвейера или записываются в конвейер. Обратите внимание, что можно указать только одно из значений
'r','w'.
-
Template.copy(infile, outfile)¶ Копирует infile в outfile через конвейер.