Çêkirina Dostaniya Python û Bash: pirtûkxaneyên smart-env û python-shell

Roja her kesî baş.

Îro, Python di warê afirandina ne tenê hilberên nermalavê bixwe de, lê di heman demê de binesaziya wan jî peyda dike, yek ji wan zimanên ku herî zêde tê bikar anîn e. Di encamê de, gelek devok, çi bi îradeya xwe an jî li dijî wê, neçar bûn ku zimanek nû fêr bibin da ku paşê bikar bînin wekî pêvekek ji tîpên baş ên kevn ên Bash. Lêbelê, Bash û Python ji bo nivîsandina kodê nêzîkatiyên cihêreng destnîşan dikin û hin taybetmendî hene, tê vê wateyê ku veguheztina tîpên Bash ji "zimanê mar" re carinan dibe ku karekî jêhatî û dûrî piçûk be.

Ji bo hêsankirina jiyanê ji devops re, gelek pirtûkxane û karûbarên kêrhatî yên li Python hatine afirandin û têne çêkirin. Ev gotar du pirtûkxaneyên nû yên ku ji hêla nivîskarê vê postê ve hatine afirandin diyar dike - smart-env и python-shell - û ji bo ku devops ji hewcedariya ku pir girîngiyê bidin ser tevliheviyên xebata bi Python re, xilas bike hatî çêkirin, cîh ji karên balkêştir re dihêle. Qada çalakiya pirtûkxaneyan guherbarên jîngehê û destpêkirina karûbarên derveyî ye.

Her kesê eleqedar, ji kerema xwe pisîkê bibîne.

"Bisîkletên" nû?

Wusa dixuye, çima pakêtên nû ji bo operasyonên pir asayî biafirînin? Çi rê li ber te digire ku hûn rasterast os.environ û jêrpêvajoyê bikar bînin.<rêbaz an jî çîna bijartina we> rasterast?

Ez ê ji bo her yek ji pirtûkxaneyan cuda delîlan pêşkêş bikim.

pirtûkxaneya smart-env

Berî nivîsandina mêjiyê xwe, kêrhatî ye ku hûn bi serhêl biçin û li çareseriyên amade bigerin. Bê guman, metirsî heye ku hûn tiştê ku hûn hewce ne bibînin, lê ev bêtir "bûyerek bîme" ye. Wekî qaîdeyek, ev nêzîkatî dixebite û gelek dem û hewldan xilas dike.

Li gorî encamên lêgerîn ev tişt hatin eşkerekirin:

  • pakêt hene ku bi rastî bangên os.environ dipêçin, lê di heman demê de komek kiryarên balkêş hewce dikin (afirandina mînakek polê, pîvanên taybetî yên di bangan de, hwd.);
  • Pakêtên baş hene, ku, lêbelê, bi ekosîstemek taybetî ve girêdayî ne (bi piranî çarçoveyên malperê yên mîna Django) û ji ber vê yekê bêyî pelê ne gerdûnî ne;
  • in hewldanên kêm ji bo tiştekî nû hene. Bo nimûne, nivîsandinê zêde bike û bi gazîkirina rêbazên mîna bi eşkere nirxên guhêrbar parse bikin
    get_<typename>(var_name)

    An jî li vir çareseriyek din, ku, lêbelê, Python 2-a nuha riswakirî piştgirî nake (ku tevî RIP fermî, hîn jî çiyayên kodên nivîskî û tevahî ekosîstem hene);

  • Pîşesazên xwendekar-dibistanê hene ku, ji ber hin sedemên nenas, di PyPI-ya jorîn de bi dawî bûn û tenê di navnavkirina pakêtên nû de pirsgirêkan diafirînin (bi taybetî, navê "smart-env" pîvanek pêdivî ye).

Û ev lîste dikare ji bo demeke dirêj berdewam bike. Lêbelê, xalên li jor bes bûn ku ez bi ramana çêkirina tiştek hêsan û gerdûnî dilgeş bikim.

Pêdiviyên ku berî nivîsandina smart-env hatine danîn:

  • Plana karanîna herî hêsan
  • Piştgiriya nivîsandina daneyê bi hêsanî tê mîheng kirin
  • Python 2.7 lihevhatî
  • Ji hêla ceribandinan ve vegirtina kodê ya baş

Di dawiyê de, ev hemî hat fêm kirin. Li vir mînakek karanîna ye:

from smart_env import ENV

print(ENV.HOME)  # Equals print(os.environ['HOME'])

# assuming you set env variable MYVAR to "True"

ENV.enable_automatic_type_cast()

my_var = ENV.MY_VAR  # Equals boolean True

ENV.NEW_VAR = 100  # Sets a new environment variable

Wekî ku hûn ji nimûneyê dibînin, ji bo ku hûn bi çînek nû re bixebitin, hûn tenê hewce ne ku wê import bikin (hûn ne hewce ne ku mînakek çêbikin - ji bilî çalakiya zêde). Gihîştina her guhêrbarek jîngehê bi binavkirina wê wekî guhêrbarek çîna ENV-ê tête bidestxistin, ku, bi rastî, vê polê ji bo jîngeha pergala xwemalî dike palpiştek xwerû, di heman demê de wê di heman demê de ji bo hema hema her pergalê vediguhezîne objeyek vesazkirinê ya gengaz ( Nêzîkatiyek wusa, mînakî, di Django de tê bidestxistin, tenê li wir tiştê veavakirinê modul / pakêt bixwe ye).

Çalakkirin/neçalakkirina moda piştevaniya nivîsandina otomatîkî bi du rêbazan pêk tê - enable_automatic_type_cast () û disable_automatic_type_cast (). Ger guhêrbara jîngehê hêmanek wekî JSON-ya serialîzekirî hebe an tewra tenê domdarek Boolean hebe (bi eşkere danîna guhêrbara DEBUG li Django bi berhevkirina guhêrbara jîngehê bi rêzikên "derbasdar" re yek ji rewşên herî gelemperî ye). Lê naha ne hewce ye ku bi eşkereyî rêzan biguhezînin - piraniya kiryarên pêwîst jixwe di kûrahiya pirtûkxaneyê de hatine bicîh kirin û tenê li benda îşaretekê ne ku tevbigerin. 🙂 Bi gelemperî, nivîsandin bi zelalî dixebite û hema hema hemî celebên daneya çêkirî yên berdest piştgirî dike (cemidandin, tevlihev û bytes nehatin ceribandin).

Pêdiviya piştgirîkirina Python 2 hema hema bêyî qurbanan hate bicîh kirin (berdana nivîsandinê û hin "şekirên şekir" yên guhertoyên herî paşîn ên Python 3), nemaze, bi saya şeşên berbelav (ji bo çareserkirina pirsgirêkên karanîna metaclass ).

Lê hin qedexe hene:

  • Piştgiriya Python 3 tê wateya guhertoya 3.5 û bilindtir (hebûna wan di projeya we de encama tembeliyê an nebûna hewcedariya çêtirbûnê ye, ji ber ku dijwar e ku meriv sedemek objektîf peyda bike ka çima hûn hîn jî li ser 3.4 in);
  • Di Python 2.7-ê de, pirtûkxane piştgirî nade deserialîzekirina rêzikên rêzkirî. Terîf vir. Lê eger kesek bixwaze pêk bîne, hûn bi xêr hatin :);

Pirtûkxane di heman demê de di doza xeletiyên parskirinê de mekanîzmayek awarte jî heye. Ger xêz ji hêla yek ji analîzerên berdest ve neyê nas kirin, nirx wekî rêzek dimîne (belê, ji ber sedemên rehetî û lihevhatina paşverû bi mantiqa adetî ya çawa guhêrbar di Bash de dixebitin).

pirtûkxaneya python-shell

Naha ez ê ji we re qala pirtûkxaneya duyemîn bikim (ez ê ravekirina kêmasiyên analogên heyî ji holê rakim - ew dişibihe ya ku ji bo smart-env hatî diyar kirin. Analog - vir и vir).

Bi gelemperî, ramana bicîhkirinê û hewcedariyên wê dişibin yên ku ji bo smart-env têne diyar kirin, wekî ku ji nimûneyê tê dîtin:

from python_shell import Shell

Shell.ls('-l', '$HOME')  # Equals "ls -l $HOME"

command = Shell.whoami()  # Equals "whoami"
print(command.output)  # prints your current user name

print(command.command)  # prints "whoami"
print(command.return_code)  # prints "0"
print(command.arguments)  # prints ""

Shell.mkdir('-p', '/tmp/new_folder')  # makes a new folder

Fikir ev e:

  1. Çînek yekane ku Bash di cîhana Python de temsîl dike;
  2. Her fermanek Bash wekî fonksiyonek çîna Shell tê gotin;
  3. Parametreyên ji bo her bangek fonksiyonê paşê di banga fermana Bash-ê ya têkildar de têne derbas kirin;
  4. Her fermanek di dema ku jê re tê gotin "li vir û niha" tê bicîh kirin, yanî. nêzîkatiya hevdem dixebite;
  5. gengaz e ku meriv di stdout-ê de û her weha koda vegerê ya fermanek bigihîje encamek;
  6. Ger ferman di pergalê de nebe, îstîsnayek tê avêtin.

Mîna smart-env, ji bo Python 2 piştgirî heye (her çend xwînek fedakartir hewce bû) û ji bo Python 3.0-3.4 piştgirî tune.

Planên pêşveçûna pirtûkxaneyê

Naha hûn dikarin pirtûkxaneyan bikar bînin: her du jî li PyPI-ya fermî têne şandin. Çavkanî li ser Github hene (li jêr binêre).

Her du pirtûkxane dê li gorî bertekên ku ji kesên eleqedar hatine berhev kirin werin pêşve xistin. Û, heke di smart-env-ê de peydakirina cûrbecûr taybetmendiyên nû dijwar be, wê hingê di python-shell de bê guman tiştek din heye ku meriv lê zêde bike:

  • piştgirî ji bo bangên ne-asteng;
  • îmkana danûstendina înteraktîf bi tîmê re (karkirina bi stdin re);
  • lê zêdekirina taybetmendiyên nû (mînak, milkê ku ji stderr-ê derketinê bistîne);
  • pêkanîna pelrêçek fermanên berdest (ji bo karanîna bi fonksiyona dir());
  • û vî awayî.

references

  1. pirtûkxaneya smart-env: Github и PyPI
  2. pirtûkxaneya python-shell: Github и PyPI
  3. Kanala Telegram nûvekirinên pirtûkxaneyê

UPD 23.02.2020/XNUMX/XNUMX:
* Depo hatine barkirin, girêdanên têkildar hatine nûve kirin
* Guhertoya python-shell==1.0.1 ji bo serbestberdanê di 29.02.2020/XNUMX/XNUMX de tê amadekirin. Guhertin di nav xwe de piştgirî ji bo temamkirina fermanê û fermana dir(Shell), xebitandina fermanên bi nasnameyek nederbasdar Python, û rastkirina xeletiyan vedihewîne.

Source: www.habr.com

Add a comment