Kutengeneza Urafiki wa Python na Bash: maktaba smart-env na python-shell

Siku njema kila mtu.

Leo, Python ni mojawapo ya lugha zinazotumiwa sana katika uwanja wa kuunda sio tu bidhaa za programu wenyewe, lakini pia kutoa miundombinu yao. Kama matokeo, waumini wengi, iwe kwa mapenzi yao au dhidi yake, ilibidi wajifunze lugha mpya kwa matumizi ya baadaye kama nyongeza ya maandishi mazuri ya zamani ya Bash. Walakini, Bash na Python wanadai mbinu tofauti za uandishi wa nambari na wana sifa fulani, ikimaanisha kuwa kuhamisha maandishi ya Bash kwa "lugha ya nyoka" wakati mwingine hugeuka kuwa kazi ya uwezo na mbali na kazi ndogo.

Ili kurahisisha maisha kwa devops, maktaba nyingi muhimu na huduma katika Python zimeundwa na zinaendelea kuundwa. Nakala hii inaelezea maktaba mbili mpya iliyoundwa na mwandishi wa chapisho hili - smart-env ΠΈ ganda la chatu - na iliyoundwa ili kupunguza devops kutoka kwa hitaji la kulipa kipaumbele sana kwa ugumu wa kufanya kazi na Python, na kuacha nafasi ya kazi za kupendeza zaidi. Upeo wa shughuli za maktaba ni vigezo vya mazingira na kuzindua huduma za nje.

Yeyote anayevutiwa, tafadhali tazama paka.

"Baiskeli" mpya?

Inaweza kuonekana, kwa nini kuunda vifurushi vipya kwa shughuli za kawaida? Ni nini kinakuzuia kutumia os.environ na subprocess.<njia au aina ya chaguo lako> moja kwa moja?

Nitatoa ushahidi kwa ajili ya kila maktaba kando.

maktaba ya smart-env

Kabla ya kuandika mawazo yako mwenyewe, ni muhimu kwenda mtandaoni na kutafuta suluhu zilizotengenezwa tayari. Bila shaka, kuna hatari ya kutopata kile unachohitaji, lakini hii ni badala ya "tukio la bima". Kama sheria, njia hii inafanya kazi na huokoa muda mwingi na bidii.

Kulingana na matokeo tafuta yafuatayo yalifichuliwa:

  • kuna vifurushi ambavyo kwa kweli hufunga simu kwa os.environ, lakini wakati huo huo zinahitaji rundo la vitendo vya kuvuruga (kuunda mfano wa darasa, vigezo maalum katika simu, nk);
  • Kuna vifurushi vyema, ambavyo, hata hivyo, vinafungamana kabisa na mfumo maalum wa ikolojia (hasa mifumo ya wavuti kama Django) na kwa hivyo sio ya ulimwengu wote bila faili;
  • kuna majaribio machache ya kufanya kitu kipya. Kwa mfano, ongeza chapa na uchanganue maadili tofauti kwa njia za kupiga simu kama vile
    get_<typename>(var_name)

    Au hapa suluhisho moja zaidi, ambayo, hata hivyo, haiungi mkono Python 2 iliyofedheheshwa sasa (ambayo, licha ya RIP rasmi, bado kuna milima ya kanuni zilizoandikwa na mfumo mzima wa ikolojia);

  • kuna ufundi wa wanafunzi wa shule, bila sababu dhahiri kwa nini waliishia kwenye PyPI ya mto na kuunda shida tu kwa kutaja vifurushi vipya (haswa, jina "smart-env" ni kipimo muhimu).

Na orodha hii inaweza kuendelea kwa muda mrefu. Walakini, vidokezo hapo juu vilitosha kunifanya nisisimke juu ya wazo la kutengeneza kitu rahisi na cha ulimwengu wote.

Masharti ambayo yaliwekwa kabla ya kuandika smart-env:

  • Mpango rahisi zaidi wa matumizi
  • Usaidizi wa kuandika data unaoweza kusanidiwa kwa urahisi
  • Python 2.7 inaendana
  • Chanjo nzuri ya nambari kwa majaribio

Hatimaye, haya yote yalitimizwa. Hapa kuna mfano wa matumizi:

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

Kama unavyoona kutoka kwa mfano, kufanya kazi na darasa jipya, unahitaji tu kuiingiza (huhitaji kuunda mfano - ondoa hatua ya ziada). Upataji wa utofauti wowote wa mazingira unapatikana kwa kurejelea kama kigezo cha darasa la ENV, ambalo, kwa kweli, hufanya darasa hili kuwa kitambaa cha angavu kwa mazingira ya mfumo asilia, wakati huo huo kukibadilisha kuwa kitu kinachowezekana cha usanidi kwa karibu mfumo wowote. mbinu kama hiyo, kwa mfano, inafikiwa Django , hapo tu kitu cha usanidi ndio moduli ya mipangilio/kifurushi chenyewe).

Kuwasha/kuzima modi ya usaidizi wa kuandika kiotomatiki hupatikana kwa kutumia mbinu mbili - enable_automatic_type_cast() na disable_automatic_type_cast(). Hii inaweza kuwa rahisi ikiwa utofauti wa mazingira una kitu kama JSON-sawa au hata kipengee cha kawaida cha Boolean (kuweka kwa uwazi utofauti wa DEBUG katika Django kwa kulinganisha utofauti wa mazingira na mifuatano "halali" ni mojawapo ya matukio ya kawaida). Lakini sasa hakuna haja ya kubadili kwa uwazi masharti - vitendo vingi muhimu tayari vimeingizwa kwenye kina cha maktaba na wanasubiri tu ishara ya kutenda. πŸ™‚ Kwa ujumla, kuandika hufanya kazi kwa uwazi na kuauni karibu aina zote za data zilizojengewa ndani (zilizogandishwa, ngumu na baiti hazijajaribiwa).

Sharti la kuunga mkono Python 2 lilitekelezwa bila dhabihu yoyote (kuacha kuchapa na baadhi ya "pipi za sukari" za matoleo ya hivi karibuni ya Python 3), haswa, shukrani kwa zile sita zinazojulikana (kusuluhisha shida za kutumia metaclasses). )

Lakini kuna vikwazo kadhaa:

  • Msaada wa Python 3 unamaanisha toleo la 3.5 na la juu zaidi (uwepo wao katika mradi wako ni matokeo ya uvivu au ukosefu wa hitaji la uboreshaji, kwani ni ngumu kupata sababu inayokusudiwa kwa nini bado uko kwenye 3.4);
  • Katika Python 2.7, maktaba haiungi mkono utaftaji wa maandishi halisi. Maelezo hapa. Lakini, ikiwa mtu yeyote anataka kutekeleza, unakaribishwa :);

Maktaba pia ina utaratibu wa kipekee ikiwa kuna makosa ya kuchanganua. Ikiwa mfuatano haukuweza kutambuliwa na kichanganuzi chochote kinachopatikana, thamani inasalia kuwa mfuatano (badala yake, kwa sababu za urahisi na upatanifu wa nyuma na mantiki ya kawaida ya jinsi vigeuzo hufanya kazi katika Bash).

maktaba ya python-shell

Sasa nitakuambia kuhusu maktaba ya pili (nitaacha maelezo ya mapungufu ya analogi zilizopo - ni sawa na ile iliyoelezwa kwa smart-env. Analogues - hapa ΠΈ hapa).

Kwa ujumla, wazo la utekelezaji na mahitaji yake ni sawa na yale yaliyoelezewa kwa smart-env, kama inavyoweza kuonekana kutoka kwa mfano:

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

Wazo ni hili:

  1. Darasa moja ambalo linawakilisha Bash katika ulimwengu wa Python;
  2. Kila amri ya Bash inaitwa kama kazi ya darasa la Shell;
  3. Vigezo vya kila simu ya kukokotoa hupitishwa kwenye simu inayolingana ya amri ya Bash;
  4. Kila amri inatekelezwa "hapa na sasa" wakati inaitwa, i.e. njia ya synchronous inafanya kazi;
  5. inawezekana kufikia pato la amri katika stdout, pamoja na msimbo wake wa kurudi;
  6. Ikiwa amri haiko kwenye mfumo, ubaguzi hutupwa.

Kama ilivyo kwa smart-env, kuna msaada kwa Python 2 (ingawa damu kidogo ya dhabihu ilihitajika) na hakuna msaada kwa Python 3.0-3.4.

Mipango ya maendeleo ya maktaba

Unaweza kutumia maktaba sasa: zote mbili zimewekwa kwenye PyPI rasmi. Vyanzo vinapatikana kwenye Github (tazama hapa chini).

Maktaba zote mbili zitatengenezwa kwa kuzingatia maoni yaliyokusanywa kutoka kwa wale wanaovutiwa. Na, ikiwa inaweza kuwa ngumu kupata anuwai ya huduma mpya katika smart-env, basi kwenye ganda la python hakika kuna kitu kingine cha kuongeza:

  • msaada kwa simu zisizozuia;
  • uwezekano wa mawasiliano maingiliano na timu (kufanya kazi na stdin);
  • kuongeza mali mpya (kwa mfano, mali ya kupokea pato kutoka kwa stderr);
  • utekelezaji wa saraka ya amri zinazopatikana (kwa matumizi na dir() kazi);
  • nk

marejeo

  1. maktaba ya smart-env: Github ΠΈ PyPI
  2. maktaba ya ganda la python: Github ΠΈ PyPI
  3. Kituo cha Telegraph sasisho za maktaba

UPD 23.02.2020/XNUMX/XNUMX:
* Hifadhi zimehamishwa, viungo vinavyolingana vimesasishwa
* Toleo la python-shell==1.0.1 linatayarishwa kwa kutolewa tarehe 29.02.2020/XNUMX/XNUMX. Mabadiliko ni pamoja na usaidizi wa kukamilisha kiotomatiki kwa amri na amri ya dir(Shell), kutekeleza amri na kitambulisho batili cha Python, na kurekebishwa kwa hitilafu.

Chanzo: mapenzi.com

Kuongeza maoni