Конвейеры в Python или Shell не нужен

Одно из серьезных преимуществ Linux перед Windows — это возможность писать скрипты, которые могут автоматизировать практически любые действия с системой. Однако скрипты, как правило, пишутся на языке Shell, который далек от современных требований к языку программирования. Далее я расскажу, каким образом Python может заменить Shell на поприще написания небольших скриптов для автоматизации системы.

Стандартный механизм вызова внешней программы из Python — это метод os.system. Однако, если нужно сделать что-то сложнее запуска единичной команды без параметров, то использование этого метода превращается в программирование на том же Shell внутри Python.

Намного более гибкое решение предоставляет Python модуль subprocess.

Простой запуск подпроцесса

Рассмотрим простейший пример использование shell. Допустим нам нужно создать архив с файлами в определенной директории:

1
tar -czvvf $outfile /somepath

Даже в этом случае subprocess дает важное преимущество — нам не нужно самим заботиться об экранировании строк:

1
2
import subprocess 
subprocess.call(['tar', '-czvvf', outfile,'/somepath'])

Перенаправление вывода

Перенаправление потоков ввода/вывода — одна из ключевых возможностей shell.

1
somecommand > filename.txt

На python же это будет выглядеть так:

1
2
f = open(outfile, 'w')
subprocess.call([‘somecommand’], stdout=f)

Использование конвейеров

Комбинирование процессов при помощи конвейеров — основа Unix-way.
1
echo `somecommand | archive`
В случае же использование Python:
1
2
3
4
pdump = subprocess.Popen([‘somecommand’], stdout=subprocess.PIPE)
parch = subprocess.Popen([archive], stdin=pdump.stdout, stdout=f)
pdump.stdout.close()
parch.communicate()
Полное описание всех возможностей модуля subprocess можно найти в официальной документации: http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

 

Конвейеры в Python или Shell не нужен: 5 комментариев

  1. Цитата «Одно из серьезных преимуществ Linux перед Windows — это возможность писать скрипты, которые могут автоматизировать практически любые действия с системой.»
    Вы не поверите, но в Windows тоже можно писать скрипты, которые могут автоматизировать практически любые действия с системой. Откуда это предложение родилось???

Добавить комментарий