Что такое питон скрипт

Пишем shell скрипты на Python и можно ли заменить им Bash

В этой небольшой статье речь пойдет о том, можно ли легко использовать Python для написания скриптов вместо Bash/Sh. Первый вопрос, который возникнет у читателя, пожалуй, а почему, собственно, не использовать Bash/Sh, которые специально были для этого созданы? Созданы они были достаточно давно и, на мой взгляд, имеют достаточно специфичный синтаксис, не сильно похожий на остальные языки, который достаточно сложно запомнить, если вы не администратор 50+ левела. Помните, ли вы навскидку как написать на нем простой if?

if [ $# -ne "$ARGCOUNT" ] then echo "Usage: `basename $0` filename" exit $E_WRONGARGS fi

Элементарно правда? Интуитивно понятный синтаксис. 🙂

Тем не менее в python эти конструкции намного проще. Каждый раз когда я пишу что то на баше, то непременно лезу в поисковик чтобы вспомнить как писать простой if, switch или что-то еще. Присвоение я уже запомнил. 🙂 В Python все иначе. Я хоть и не пишу на нем круглые сутки, но никогда не приходилось лезть и смотреть как там сделать простой цикл, потому что синтаксис языка простой и интуитивный. Плюс ко всему он намного ближе к остальным мейнстримовым языкам типа java или c++, чем Bash/Sh.

Читайте также:  Ограничение int в java

Также в стандартной и прочих библиотеках Python есть намного более удобные библиотеки чем консольные утилиты. Скажем, вы хотите распарсить json, xml, yaml. Знаете какой я недавно видел код в баше чтобы сделать это? Правильно:

python -c "import json; json.loads. " :)

И это был не мой код. Это был код баше/питоно нейтрального человека.

То же самое с регексом, sed бесспорно удобная утилита, но как много людей помнит как правильно ее использовать? Ну кроме Lee E. McMahon, который ее создал. Да впринципе многие помнят, даже я помню как делать простые вещи. Но, на мой взгляд, в Python модуль re намного удобнее.

В этой небольшой статье я хотел бы представить вам диалект Python который называется shellpy и служит для того, чтобы насколько это возможно заменить Bash на python в скриптах.

Введение

Shell python ничем не отличается от простого Python кроме одной детали. Выражения внутри grave accent символов ( ` ) в отличие от Python не является eval, а обозначает выполнение команды в шелле. Например

выполнит ls -l как shell команду. Также возможно написать все это без ` в конце строки

и это тоже будет корректным синтаксисом.

Можно выполнять сразу несколько команд на разных строках

` echo test > test.txt cat test.txt `

и команды, занимающие несколько строк

`echo This is \ a very long \ line

Выполнение каждого выражения в shellpy возвращается объект класса Result

Это можно быть либо Result либо InteractiveResult (Ссылки на гитхаб с документацией, можно и потом посмотреть 🙂 ). Давайте начнем с простого результата. Из него можно легко получить код возврата выполненной команды

result = `ls -l print result.returncode

И текст из stdout и stderr

result = `ls -l result_text = result.stdout result_error = result.stderr

Можно также пробежаться по всем строкам stdout выполненной команды в цикле

result = `ls -l for line in result: print line.upper()

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

result = `ls -l if result: print 'Return code for ls -l was 0'

Или же более простым способом получить текст из stdout

result = `ls -l print result

Все вышеперечисленное — это обзор синтаксиса вкратце, чтобы просто понять основную идею и не грузить вас всеми-всеми деталями. Там есть еще много чего и для интерактивного взаимодействия с выполняемыми командами, для управления исполнением команд. Но это все детали, в которые можно окунуться в документации (на английском языке), если сама идея вам покажется интересной.

Это ж не валидный синтаксис Python получается, как все работает то?

Магия конечно, как еще 🙂 Да, друзья мои, мне пришлось использовать препроцессинг, каюсь, но другого способа я не нашел. Я видел другие библиотеки, которые делают нечто подобное, не нарушая синтаксиса языка вроде

from sh import ifconfig print(ifconfig("wlan0"))

Но меня такой синтаксис не устраивал, поскольку даже несмотря на сложности, хотелось получить best user experience ©, а для меня это значит насколько это возможно простое и близкое к его величеству Шеллу написание команд.

Знакомый с темой читатель спросит, чем IPython то тебя не устроил, там ж почти как у тебя только значок другой ставить надо, может ты просто велосипедист, которому лень заглянуть в поисковик? И правда он выглядит вот так:

Я его пытался использовать но встретил пару серьезных проблем, с которыми ужиться не смог. Самая главная из них, то что нет простого импорта как в Python. То есть ты не можешь написать какой-то код на самом ipython и легко его переиспользовать в других местах. Невозможно написать для своего ipython модуля

и чтобы все сразу заработало как в сказке. Единственный способ переиспользовать скрипт, это выполнить его. После выполнения в окружении у тебя появляются все функции и переменные, объявленные в выполняемом файле. Не кошерно на мой взгляд.

В shellpy код переиспользуется легко и импортируется точно так же как и в обычном python. Предположим у нас есть модуль common в котором мы храним очень полезный код. Заглянем в директорию с этим модулем

ls common/ common.spy __init__.spy

Итак, что у нас тут есть, ну во первых init, но с расширением .spy. Это и является отличительной чертой spy модуля от обычного. Посмотрим также внутрь файла common.spy, что там интересного

def common_func(): return `echo 5

Мы видим что тут объявлена функция, которая внутри себя использует shellpy синтаксис чтобы вернуть результат выполнения `echo 5. Как этот модуль используется в коде? А вот как

from common.common import common_func print('Result of imported function is ' + str(common_func()))

Видите? Как в обычном Python, просто взяли и заимпортировали.

Как же все работает. Это работает с помощью PEP 0302 — New Import Hooks. Когда вы импортируете что-то в своем коде то вначале Python спрашивает у хука, нет ли тут чего-то твоего, хук просматривает PYTHONPATH на наличие файлов *.spy или модулей shellpython. Если ничего нет, то так и говорит: «Ничего нету, импортируй сам». Если же он находит что-то там, то хук занимается импортом самостоятельно. А именно, он делает препроцессинг файла в обычный python и складывает все это добро в temp директорию операционной системы. Записав новый Python файл или модуль он добавляет его в PYTHONPATH и за дело берется уже самый обыкновенный импорт.

Давайте же скорее посмотрим на какой-нибудь пример

Этот скрипт скачивает аватар юзера Python с Github и кладет его в temp директорию

 import json import os import tempfile # с помощью curl получает ответ от апи гитхаба answer = `curl https://api.github.com/users/python # синтаксический сахар чтобы сравнить результат выполнение с нулем if answer: answer_json = json.loads(answer.stdout) avatar_url = answer_json['avatar_url'] destination = os.path.join(tempfile.gettempdir(), 'python.png') # в этот раз скачиваем саму картинку result = `curl > if result: # если проблем не возникло, то показываем картинку p`ls -l else: print('Failed to download avatar') print('Avatar downloaded') else: print('Failed to access github api')

Установка

Shellpython можно установить двумя способами: pip install shellpy или склонировав репозиторий и выполнив setup.py install . После этого у вас появится утилита shellpy .

Запустим же что-нибудь

После установки можно потестировать shellpython на примерах, которые доступны прямо в репозитории.

shellpy example/curl.spy shellpy example/git.spy

Также здесь есть allinone примеры, которые называются так, потому что тестируют все-все функции, которые есть в shellpy. Загляните туда, чтобы лучше узнать что же там еще такого есть, либо просто выполните

shellpy example/allinone/test.spy

Для третьего Python команда выглядит вот так

shellpy example/allinone/test3.spy

Совместимость

Это работает на Linux и должно работать на Mac для Python 2.x и 3.x. На виндовсе пока не работает, но проблем никаких для работы нет, так как все писалось с использованием кроссплатформенных библиотек и ничего платформоспецифичного в коде нет. Просто не дошли руки еще, чтобы потестировать на виндовсе. Мака у меня тоже нет, но вроде у друга работало 🙂 Если у вас есть мак и у вас все нормально, скажите пожалуйста.

Если найдете проблемы — пишите в коммент, либо сюда либо телеграфируйте как-нибудь 🙂

Документация (на английском)

Можно ли законтрибьютить

Оно мне ничего в продакшене не разломает?

Сейчас версия 0.4.0, это не стейбл и продакшн процессы пока лучше не завязывать на скрипт, подождав пока все отладится. Но в девелопменте, CI можно использовать вполне. Все это покрыто тестами и работает 🙂

P.s.

Пишите ваши отзывы об идее в целом и о реализации в частности, а также о проблемах, пожеланиях, всех рад услышать 🙂 Заводите Issues еще в гитхабе, там их уже много 🙂

Источник

Python Scripting Tutorials & Script Examples

Scripting is a very smart and useful programming discipline but its terms can also be confusing and mystifying.

I’m going to explain you the basics of scripting so you never get confused about this topic again. We also have example scripts that will suit your learning very well.

One myth is that you have to be a very experienced or advanced programmer. This is not true and you can pick up scripting very quickly if you learn just the basics of a programming language like Python. You can always continue learning along the journey.

What is scripting?

Script is a piece of code that’s used to automate system oriented tasks. When you write code that carries out a practical task without needing compiling this can be called scripting.

Scripts are usually written in high-level languages such as Python, Perl or even PowerShell.

Scripting as a term can be confusing because it’s very broad. Scripting can also be done in different environments such as servers, operating systems, apps, games, websites, software and even in other languages or command line.

What can I do with scripting?

  • Automation is a big one.
  • Use as a glue language. (Glue language means operating another language with a piece of code in a more convenient language.) So, basically when you write a piece of Python code to execute tasks on an operating system like Windows or on a server, you’d be using Python as a glue language.
  • GUI scripting. Not to be confused with GUI programming or creating GUIs. GUI scripting is when you use or manipulate a program through its graphical user interface via scripting. When you press buttons, send keys or mouse clicks, tab presses etc. this can be considered GUI scripting. There are also pixel level GUI scripting practices which evaluate and understand the GUI at pixel level and operates accordingly. I.e.: clicking green buttons.

What are common scripting languages?

Most of the commonly used and high level languages can be considered as scripting languages. Most used ones are:

  • Python
  • Perl
  • Java
  • Javascript (name checks)
  • VBA
  • Ruby
  • Php
  • Julia
  • PowerShell and Command Prompt
  • Linux & MacOS Terminals (bash, sh, zsh…)

Python Scripting Tutorial

Scripting is a very common practice among Python programmers. It’s used for automation of daily tasks, reporting, server management, security, social media management, business growth and development, financial trading, automating software and many other intelligent solutions.

Is Python good for scripting?

Python is not just good for scripting it’s perfect for scripting.

  • Easy entry: Python has a very simple and enjoyable syntax which makes it relatively easy to learn compared to most other languages. Also there are vast free resources to learn Python anytime anywhere.
  • Rich libraries: Rich libraries means higher specialization and maturity for a programming language. With so many great libraries you can focus on getting the tasks done and not have to build everything from scratch. For instance, if you want to create a GUI you don’t have to write a GUI library first, there are already great options (tkinter, pysimplegui, pyqt, kivy etc.), if you want to work with images you don’t have to write the whole thing from scratch there is already PIL, if you are working on a mathematical model you don’t have to build the whole math equations from ground up, you can use numpy and scipy etc. There is a library for pretty much every significant field as of today.
  • Community support: If you struggle or hit a bottleneck, there will be almost instant free support thanks to the millions of coders and contributors in the Python programming community.
  • Language interoperability: Python can conveniently interact with other programming languages, operating systems and existing software. This makes it highly convenient for scripting.

Источник

Оцените статью