Писане шел скриптове в 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). И дори теоретично е възможно да се реализира всеки нормален Марков алгоритъм, но това е от категорията на перверзия.