Одно из серьезных преимуществ 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) |
Использование конвейеров
1 | echo `somecommand | archive` |
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() |
Это произведение доступно по лицензии Creative Commons «Attribution» («Атрибуция») 3.0 Непортированная.
Всё равно на питоне получается куда больше букаф :/
Получается, но если нужно написать что-то достаточно сложное, код на Python будет гораздо более вменяемый.
В любом случае, такой подход позволит избавиться от связок Python + shell-скрипт. Всегда считал, что чем меньше лишних языков в проекте, тем удобнее.
Цитата «Одно из серьезных преимуществ Linux перед Windows — это возможность писать скрипты, которые могут автоматизировать практически любые действия с системой.»
Вы не поверите, но в Windows тоже можно писать скрипты, которые могут автоматизировать практически любые действия с системой. Откуда это предложение родилось???
Lector, да, в винде тоже можно (особенно радует павершелл), но в никсах это обычно как-то лучше получается 🙂 Троллить не буду, буду субъективен 🙂