ПредишенСледващото

Писане шел скриптове в Python и че е възможно да ги замени Баш 36

  • 21.02.16 02:31 •
  • lamerman •
  • • # 277679
  • • Habrahabr
  • 34 •
  • 26400

- като Forbes, само по-добре.

В тази малка статия ще се фокусира върху това дали е възможно да се използват лесно Python скриптове вместо Bash / Sh. Първият въпрос, който възниква във връзка с читателя, може би, защо да не я използват в действителност Bash / Sh, които са специално създадени за тази цел? Те са създадени от дълго време и, по мое мнение, са доста специфичен синтаксис не е много подобна на други езици, което е доста трудно да се помни, че ако не сте администратор 50+ изравни. Не забравяйте, че ако пишете без да мислят, че лесно, ако?


Азбучна истина? Интуитивен синтаксис. )

Независимо от това, в питон, тези проекти много по-лесно. Всеки път, когато напиша нещо по Баче, вие със сигурност ще се изкачи в търсачката да си спомня как да напишете проста, ако, комутатор или нещо друго. Присвояване си спомних. ) В Python всичко е различно. Въпреки, че аз не пиша за това по цял ден, но никога не е трябвало да се изкачи и да гледам го направи проста цикъл, защото синтаксиса на езика лесно и интуитивно. Плюс това, тя е много по-близо до останалата част от основните езици на такива като Java или C ++, отколкото Bash / Sh.

Също като стандарт, както и други Python библиотеки имат много по-удобно, отколкото библиотека командния ред комунални услуги. Да речем, че искате да се направи разбор на JSON, XML, yaml. Знаеш ли как аз наскоро видях в Баче код, за да направите това? коригира:


И това не е моя код. Това е код Баче / Pitono неутрален човек.

Същото е и с регулярния израз, Sed е безспорно полезен инструмент, но колко хора си как да го използвам? Е, с изключение на Лий Д. Макмеън, който го е създал. Да, по принцип, много си спомням, дори си спомням как се прави прости неща. Но, по мое мнение, в ре модул Python е много по-лесно.

В тази малка статия бих искал да ви представя на диалекта на Python, наречена shellpy и служи за да се гарантира, че доколкото е възможно да се замени Баш в питон скриптове.


Shell питон не се различава от прост Python с изключение на един детайл. Изразите вътре характер гроба акцент ( ') за разлика от Python не е EVAL и обозначава инструкциите в черупка. например


изпълнява LS -L като команда обвивка. Също така е възможно да се напише всичко това без `в края на линия


и тя също ще бъде правилния синтаксис.

Можете да изпълните няколко команди на отделни редове


и команди, които обхващат няколко линии


Извършване на всеки израз в shellpy връща обект от клас Резултати


Това може да бъде или в резултат InteractiveResult (Връзки към githab документация, а след това можете да видите :)). Да започнем с един прост резултат. От него можете лесно да получите код за връщане на изпълнена команда


И в текста на стандартния изход и STDERR


Можете също така да се движат по всички линии стандартния изход команда изпълнена в цикъла

За резултата има и още много синтактично захар. Например, ние можем лесно да се провери, че завръщането кода на изпълнена команда е нула


Или по-лесен начин, за да получите текста от стандартния изход


Всички по-горе - това е кратък преглед на синтаксиса, само за да получите една основна идея, а не да ви достави всички, всички детайли. Все още има много неща, както и за взаимодействието с изпълнява команди за контрол на изпълнението на команди. Но това е всички детайли, в които можете да се потопят в документацията (на английски език), ако самата идея изглежда интересна за вас.

Ами това не е валиден синтаксис Python Оказва се, как всичко работи тогава?


Магията разбира се, как иначе :) Да, моите приятели, аз трябваше да се използва за предварително обработване, признавам, но по друг начин, аз не е намерен. Виждал съм други библиотеки, които правят нещо подобно, без да се счупи синтаксис като

Запознат с предмет на читателя ще попитам, какво IPython че не приемам, има Ами почти веднага след като е необходимо да се постави друга иконата, която можеш просто да велосипедисти, които прекалено мързеливи, за да търсят в търсачката? И това наистина изглежда така:


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


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

В shellpy код pereispolzuetsya лесно внесени по същия начин, както в нормалния питон. Да предположим, че имаме общ модул, в който ние държим много полезен код. Погледнете в директорията на този модул


Така че това, което имаме тук, е, добре, в първия първоначален. но с разширяването на .spy. Това е отличителен белег на шпионин модул от обичайните. Погледнете също вътре common.spy файл, който има интересна


Виждаме, че там е обявен функцията, която вътрешно използва shellpy синтаксис, за да се върне в резултат на `ехо 5. модула се използва в кода? Ето как


Виждате ли? Както и в обичайния Python, просто взех и успешно внесени.

Как работят нещата. Тя работи с помощта на PEP 0302 - Нов внос куки. Когато импортирате нещо в кода, който първоначално Python пита куката, не е ли нещо твое, кука PYTHONPATH сканира файлове * .spy или shellpython модули. Ако няма нищо, а след това и каза: "Нищо не е налице, внасяме си сам". Ако той установи, нещо там, а след това куката се занимава с внос на техните собствени. А именно, че има файл предварителна обработка към нормалното питон и поставя всички тези неща в темп директорията на операционната система. Писане на ново Python модул или да я внесе я добавя към PYTHONPATH и причината е взето вече най-обикновени внос.

Нека по-скоро да разгледаме някои пример


Shellpython може да се зададе по два начина: пип инсталирате shellpy или клонира хранилището и изпълнение setup.py инсталирате. След това ще имате shellpy полезност.

Изпълнява се като нищо


След инсталацията, можете да тествате shellpython примерите, които са достъпни директно в хранилището.


Има и AllInOne примери, които се наричат ​​така, защото всички изпитания-всички функции, които са в shellpy. Виж там, за да разберете, че е по-добре, тъй като има повече от това, или просто стартирате


За трети командата Python изглежда така

съвместимост


Тя работи на Linux и трябва да работи на Mac за Python 2.x и 3.x. На windose, че не работи, но няма проблеми да работят там, тъй като всички написани на междуплатформени библиотеки и личен platformospetsifichnogo код не. Точно зад все още не трябва да се тества софтуера на windose. Мак мен или, но както и в други произведения :) Ако имате мак, а вие всички сте добре, моля, уведомете ни.

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

Мога ли да zakontribyutit

Аз съм в prodakshene няма да се счупи?


Сега версия 0.4.0, не е стабилна и производствени процеси, а по-добре е да не се връзвам на сценария, изчака, докато всички за отстраняване на грешки. Но в развитие, CI може да се използва напълно. Всичко това се покрива от тестовете и работи :)


Е-мейл с отзивите си за идеята като цяло и за изпълнението по-специално, както и проблеми, желания, всички щастливи да чуят :) Shift в въпроси все още githabe, където те имат много :)

Живях за дълго време, за да удрям и само през миналата година реши отново да експериментира с тези новоизлюпена среди. zsh решили да пропуснат и започна да xonsh, защото изглежда, че може да бъде полезно. Като цяло, аз не се разбираме с него, защото от най-странните неща (довършване ме боли през цялото време да се разбере това, което пиша) и липсата на основни неща, като достатъчно и || в Баш. Е, крива подкрепа virtualenv (и това shell'e в Python за феновете да пишат проекти в Python). Но рибата - наистина беше много приятно нещо, а след това спря (дори малка скрийнкаст записани).

Само преди седмица, добавих xonsh среди Мениджър :-) ли нещо да се подобри, но като цяло, проблемът е решен.

Проектът се, да растат, не споря.

някои спорни точки в сравнение с нормална риба история и standartnory библиотека също, всички правила за ползване на година, много доволен, особено с gitom кутия и щепсел за virtualenv. Може изясня тези точки?

Не винаги е толкова ужасно в Баш, можете да използвате операторите обичайните за сравнение, вместо -NE и др.
Най-харесвани за използване в питон argparse, за конзолни команди. И това вече предизвика Баш скрипт за пример.

Харесва ми. IMHO, първото нещо, което да се помисли в посока на реализация / reyuza Readline за такъв черупка. Отново, IMHO - ако основните yuzekeys скриптове, шансът да летят много по-малко, без удобен интерактивен режим в известен смисъл.

искате да се направи разбор на JSON, XML, yaml Има JQ / xmlstarlet / shyaml. вие със сигурност ще се изкачи в търсачката Вместо да погледнем на потребителя, който е вече на дискови лъжи. Обикновено. език прост и интуитивен вратовете имат твърде лесно и интуитивно синтаксис ако doperet че "ключови думи" - това е всъщност имената на отборите, съответно, те са винаги в началото и не повече от един за отбора. А така pyhtona след това в сравнение с "основните езици" синтаксис не по-малко е странно. И задължителен синтаксис, за да форматирате много плаши. Понякога една красива фраза, която да пиша, отколкото дълъг тесен "стълба".

Има JQ / xmlstarlet / shyaml
Това не е, че има нещо по принцип, но използваемостта.

Вместо да се погледне на потребителя, който е вече на дискови лъжи. Обикновено.
Защо отиде в инструкцията за гледане на синтаксиса на оператора (моля, не бъркайте това с "защо се притеснява да влезе в ръководството:" Аз не съм казвал, че :))? Finder ще реагира веднага и ръчно, трябва първо да се намери, и след това да го намерите, ако.

но лекотата на използване и как добре vpihivanie една лайнери скриптове на различен език, предназначен за удобни CLI комунални услуги с компактен заявки синтактични? Finder ще отговори незабавно, ако връзката е бързо. Дори и така, че е необходимо да преминете през няколко места. наръчник, трябва първо да се намери директен начин е трудно да въведете мъж Баш, да. след това да го намерят, ако. Но с това, че има проблем, да, dyuzhet голям ръчен и сблъсъци на търсенето е много, дори и при най-/ ^ \ S +, ако много падания. От друга страна, ако преминете през всичко това веднъж, че е възможно да се помни, че отборът в края.

AWK - обикновено отделен език с много възможности. Като цяло това е доста големи писане на скриптове. Е, СЕД - не е липсваш, в допълнение към поп и / Foo / бар / все още има много полезни функции, от най-простите - отпечатване на определен набор от линии (СЕД -н 17,19p). И дори теоретично е възможно да се реализира всеки нормален Марков алгоритъм, но това е от категорията на перверзия.

Подкрепете проекта - споделете линка, благодаря!