Paghimo sa Python ug Bash Friendship: smart-env ug python-shell nga mga librarya

Maayong adlaw sa tanan.

Karon, ang Python usa sa labing gigamit nga mga sinultian sa natad sa paghimo dili lamang mga produkto sa software mismo, apan naghatag usab sa ilang mga imprastraktura. Ingon usa ka sangputanan, daghang mga devops, bisan sa ilang kabubut-on o supak niini, kinahanglan nga magkat-on sa usa ka bag-ong lengguwahe aron magamit sa ulahi ingon usa ka suplemento sa maayo nga daan nga mga script sa Bash. Bisan pa, ang Bash ug Python nag-angkon nga lainlain nga mga pamaagi sa pagsulat sa code ug adunay piho nga mga bahin, nagpasabut nga ang pag-port sa mga script sa Bash sa "pinulongan sa bitin" usahay mahimo’g usa ka kapasidad ug layo sa gamay nga buluhaton.

Aron mapadali ang kinabuhi alang sa mga devops, daghang mapuslanon nga mga librarya ug mga gamit sa Python ang gihimo ug padayon nga gihimo. Kini nga artikulo naghulagway sa duha ka bag-ong mga librarya nga gihimo sa tagsulat niini nga post - smart-env ΠΈ python-shell - ug gidisenyo aron sa paghupay sa mga devops gikan sa panginahanglan sa pagbayad sa usa ka daghan sa pagtagad ngadto sa mga intricacies sa pagtrabaho uban sa Python, nga nagbilin ug lawak alang sa mas makapaikag nga mga buluhaton. Ang sakup sa kalihokan sa mga librarya mao ang mga variable sa palibot ug paglansad sa mga eksternal nga kagamitan.

Bisan kinsa nga interesado, palihug tan-awa ang iring.

Bag-ong "mga bisikleta"?

Morag, nganong maghimo bag-ong mga pakete alang sa ordinaryo nga mga operasyon? Unsa ang nagpugong kanimo sa paggamit sa os.environ ug subprocess.<pamaagi o klase nga imong gipili> direkta?

Maghatag ako og ebidensya pabor sa matag usa sa mga librarya nga gilain.

smart-env library

Sa wala pa isulat ang imong kaugalingon nga brainchild, mapuslanon nga mag-online ug mangita alang sa andam nga mga solusyon. Siyempre, adunay peligro nga dili makit-an ang imong kinahanglan, apan kini usa ka "hinabo sa seguro". Ingon sa usa ka lagda, kini nga pamaagi molihok ug makatipig daghang oras ug paningkamot.

Pinauyon sa mga sangputanan pagpangita ang mosunod gipadayag:

  • adunay mga pakete nga aktwal nga nagputos sa mga tawag sa os.environ, apan sa samang higayon nanginahanglan usa ka hugpong sa mga makabalda nga aksyon (paghimo usa ka pananglitan sa usa ka klase, espesyal nga mga parameter sa mga tawag, ug uban pa);
  • Adunay maayo nga mga pakete, nga, bisan pa, hugot nga gihigot sa usa ka piho nga ekosistema (kadaghanan sa mga web framework sama sa Django) ug busa dili gyud unibersal nga wala’y file;
  • adunay talagsaon nga mga pagsulay sa pagbuhat sa usa ka butang nga bag-o. Pananglitan, idugang ang pag-type ug tin-aw nga nag-parse sa mga variable nga kantidad pinaagi sa pagtawag sa mga pamaagi sama sa
    get_<typename>(var_name)

    O dinhi usa pa ka solusyon, nga, bisan pa, wala nagsuporta sa karon gipakaulawan nga Python 2 (nga, bisan pa opisyal nga RIP, aduna pay mga bukid sa sinulat nga code ug tibuok ekosistema);

  • adunay mga crafts sa eskwelahan-estudyante nga, sa wala mahibal-i nga rason, natapos sa upstream nga PyPI ug nagmugna lamang og mga problema sa pagngalan sa bag-ong mga pakete (sa partikular, ang ngalan nga "smart-env" usa ka gikinahanglan nga sukod).

Ug kini nga lista mahimong magpadayon sa dugay nga panahon. Bisan pa, ang mga punto sa ibabaw igo na aron madasig ako bahin sa ideya sa paghimo sa usa ka butang nga kombenyente ug unibersal.

Mga kinahanglanon nga gitakda sa wala pa isulat ang smart-env:

  • Ang labing yano nga pamaagi sa paggamit
  • Dali nga ma-configure nga suporta sa pag-type sa datos
  • Ang Python 2.7 compatible
  • Maayo nga pagsakup sa code pinaagi sa mga pagsulay

Sa kataposan, kining tanan natuman. Ania ang usa ka pananglitan sa paggamit:

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

Sama sa imong makita gikan sa panig-ingnan, aron magtrabaho sa usa ka bag-ong klase, kinahanglan nimo nga i-import kini (dili nimo kinahanglan nga maghimo usa ka pananglitan - minus ang dugang nga aksyon). Ang pag-access sa bisan unsang variable sa palibot makab-ot pinaagi sa paghisgot niini ingon usa ka variable sa klase sa ENV, nga, sa tinuud, naghimo niini nga klase nga usa ka intuitive wrapper alang sa lumad nga sistema sa palibot, samtang dungan nga gihimo kini nga usa ka posible nga butang sa pag-configure alang sa halos bisan unsang sistema ( usa ka susama nga pamaagi, pananglitan, nakab-ot sa Django , didto ra ang butang sa pag-configure mao ang module sa setting / package mismo).

Ang pag-enable/pag-disable sa automatic typing support mode makab-ot gamit ang duha ka pamaagi - enable_automatic_type_cast() ug disable_automatic_type_cast(). Mahimo kini nga kombenyente kung ang variable sa palibot adunay usa ka serialized nga butang nga sama sa JSON o bisan usa ka kanunay nga Boolean (tin-aw nga nagbutang sa variable nga DEBUG sa Django pinaagi sa pagtandi sa variable sa palibot nga adunay mga "balido" nga mga kuwerdas usa sa labing kasagaran nga mga kaso). Apan karon dili na kinahanglan nga tin-aw nga magbag-o sa mga kuwerdas - kadaghanan sa mga kinahanglan nga aksyon na-embed na sa kahiladman sa librarya ug naghulat lang sa usa ka signal nga molihok. πŸ™‚ Sa kinatibuk-an, ang pag-type molihok nga transparent ug nagsuporta sa hapit tanan nga magamit nga mga built-in nga tipo sa data (frozenset, komplikado ug mga byte wala gisulayan).

Ang kinahanglanon sa pagsuporta sa Python 2 gipatuman nga halos walay sakripisyo (ang pagbiya sa pag-type ug pipila sa mga "sugar candies" sa pinakabag-o nga bersyon sa Python 3), ilabi na salamat sa ubiquitous nga unom (aron masulbad ang mga problema sa paggamit sa metaclasses) .

Apan adunay pipila ka mga pagdili:

  • Ang suporta sa Python 3 nagpasabut nga bersyon 3.5 ug mas taas (ang ilang presensya sa imong proyekto resulta sa pagkatapulan o kakulang sa panginahanglan alang sa mga pag-uswag, tungod kay lisud ang paghimo sa usa ka katuyoan nga hinungdan ngano nga naa ka sa 3.4);
  • Sa Python 2.7, ang librarya wala nagsuporta sa deserialization sa mga set nga literal. Deskripsyon dinhi. Pero kung kinsa man ang gusto mu-implement ani, welcome ka :);

Ang librarya usab adunay usa ka eksepsiyon nga mekanismo kung adunay mga sayup sa pag-parse. Kung ang hilo dili mailhan sa bisan unsang magamit nga analisador, ang kantidad nagpabilin nga usa ka hilo (hinoon, alang sa mga hinungdan sa kasayon ​​​​ug atrasado nga pagkaangay sa naandan nga lohika kung giunsa ang mga variable molihok sa Bash).

librarya sa python-shell

Karon isulti ko kanimo ang bahin sa ikaduha nga librarya (Isalikway nako ang paghulagway sa mga kakulangan sa naa nga mga analogue - parehas kini sa gihulagway alang sa smart-env. Analogues - dinhi ΠΈ dinhi).

Sa kinatibuk-an, ang ideya sa pagpatuman ug ang mga kinahanglanon alang niini susama sa gihulagway alang sa smart-env, ingon sa makita sa pananglitan:

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

Ang ideya mao kini:

  1. Usa ka klase nga nagrepresentar sa Bash sa kalibutan sa Python;
  2. Ang matag Bash command gitawag isip function sa Shell class;
  3. Ang mga parametro alang sa matag function call unya ipasa ngadto sa katugbang nga Bash command call;
  4. Ang matag sugo gipatuman "dinhi ug karon" sa higayon nga kini gitawag, i.e. ang synchronous nga pamaagi molihok;
  5. posible nga ma-access ang output sa usa ka command sa stdout, ingon man ang return code niini;
  6. Kung ang mando wala sa sistema, usa ka eksepsiyon ang ilabay.

Sama sa smart-env, adunay suporta alang sa Python 2 (bisan kung gikinahanglan ang gamay nga sakripisyo nga dugo) ug walay suporta alang sa Python 3.0-3.4.

Mga plano sa pagpalambo sa librarya

Mahimo nimong gamiton ang mga librarya karon: ang duha gi-post sa opisyal nga PyPI. Ang mga tinubdan anaa sa Github (tan-awa sa ubos).

Ang duha ka mga librarya pagahimoon nga gikonsiderar ang feedback nga nakolekta gikan sa mga interesado. Ug, kung mahimo’g lisud ang paghimo sa lainlaing mga bag-ong bahin sa smart-env, nan sa python-shell siguradong adunay lain nga idugang:

  • suporta alang sa dili pag-block sa mga tawag;
  • posibilidad sa interactive nga komunikasyon uban sa team (nagtrabaho uban sa stdin);
  • pagdugang og bag-ong mga kabtangan (pananglitan, kabtangan aron makadawat og output gikan sa stderr);
  • pagpatuman sa usa ka direktoryo sa anaa nga mga sugo (alang sa paggamit sa dir() function);
  • ug uban pa.

mga pakisayran

  1. smart-env library: Github ΠΈ PyPI
  2. librarya sa python-shell: Github ΠΈ PyPI
  3. Telegram channel mga update sa librarya

UPD 23.02.2020/XNUMX/XNUMX:
* Gibalhin ang mga repository, gi-update ang katugbang nga mga link
* Ang bersyon nga python-shell == 1.0.1 giandam alang sa pagpagawas sa 29.02.2020/XNUMX/XNUMX. Ang mga pagbag-o naglakip sa suporta alang sa command autocomplete ug ang dir(Shell) command, pagpadagan sa mga command nga adunay dili balido nga Python identifier, ug mga pag-ayo sa bug.

Source: www.habr.com

Idugang sa usa ka comment