Kupanga Ubwenzi wa Python ndi Bash: malaibulale anzeru-env ndi python-shell

Tsiku labwino nonse.

Masiku ano, Python ndi chimodzi mwa zilankhulo zomwe zimagwiritsidwa ntchito kwambiri popanga osati mapulogalamu okha, komanso kupereka zipangizo zawo. Chotsatira chake, ma devops ambiri, kaya mwa kufuna kwawo kapena motsutsa, anayenera kuphunzira chinenero chatsopano kuti adzagwiritse ntchito pambuyo pake monga chowonjezera ku malemba akale a Bash. Komabe, Bash ndi Python amavomereza njira zosiyanasiyana zolembera ma code ndipo ali ndi zina, kutanthauza kuti kunyamula malemba a Bash ku "chinenero cha njoka" nthawi zina kumakhala kovuta komanso kutali ndi ntchito yaing'ono.

Kuti moyo ukhale wosavuta kwa ma devops, malaibulale ambiri othandiza ku Python adapangidwa ndipo akupitiliza kupangidwa. Nkhaniyi ikufotokoza malaibulale awiri atsopano opangidwa ndi wolemba izi - smart-env ΠΈ python-chipolopolo - ndipo adapangidwa kuti athetse ma devops pakufunika kosamalira kwambiri zovuta zogwirira ntchito ndi Python, kusiya mwayi wochita zinthu zambiri zosangalatsa. Kuchuluka kwa ntchito zama library ndikusinthasintha kwachilengedwe ndikuyambitsa zida zakunja.

Aliyense amene ali ndi chidwi, chonde awone mphaka.

"Njinga" zatsopano?

Zikuwoneka, bwanji kupanga phukusi latsopano la ntchito wamba? Nchiyani chimakulepheretsani kugwiritsa ntchito os.environ ndi subprocess.<njira kapena kalasi yomwe mwasankha> mwachindunji?

Ndipereka umboni mokomera malaibulale aliwonse padera.

smart-env library

Musanalembe ubongo wanu, ndizothandiza kupita pa intaneti ndikuyang'ana njira zomwe zakonzedwa kale. Inde, pali chiopsezo chosapeza zomwe mukufuna, koma izi ndi "inshuwaransi". Monga lamulo, njirayi imagwira ntchito ndikupulumutsa nthawi yambiri ndi khama.

Malinga ndi zotsatira kusaka zotsatirazi zidawululidwa:

  • pali maphukusi omwe amakulunga mafoni ku os.environ, koma nthawi yomweyo amafuna zinthu zambiri zosokoneza (kupanga chitsanzo cha kalasi, magawo apadera mu mafoni, etc.);
  • Pali maphukusi abwino, omwe, komabe, amamangiriridwa ku chilengedwe china (makamaka ma intaneti monga Django) ndipo motero sali konse konse popanda fayilo;
  • pali osowa kuyesa kuchita chinachake chatsopano. Mwachitsanzo, onjezani kulemba ndikuwunikira momveka bwino zosinthika poyimbira njira ngati
    get_<typename>(var_name)

    Kapena apa yankho linanso, zomwe, komabe, sizigwirizana ndi Python 2 yochititsa manyazi tsopano (yomwe, ngakhale RIP yovomerezeka, padakali mapiri olembedwa ndi chilengedwe chonse);

  • Pali zaluso za ophunzira kusukulu zomwe, pazifukwa zosadziwika, zidatha kumtunda wa PyPI ndikungoyambitsa mavuto ndi kutchula mapaketi atsopano (makamaka, dzina loti "smart-env" ndilofunika).

Ndipo mndandandawu ukhoza kukhalapo kwa nthawi yaitali. Komabe, mfundo zomwe zili pamwambazi zinali zokwanira kundichititsa kusangalala ndi lingaliro lopanga china chake chosavuta komanso chapadziko lonse lapansi.

Zofunikira zomwe zidakhazikitsidwa musanalembe smart-env:

  • Njira yosavuta yogwiritsira ntchito
  • Thandizo lothandizira kulemba deta mosavuta
  • Python 2.7 yogwirizana
  • Kuphunzira kwa code yabwino ndi mayeso

Pomaliza, zonsezi zidakwaniritsidwa. Nachi chitsanzo chogwiritsa ntchito:

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

Monga mukuwonera pachitsanzo, kuti mugwire ntchito ndi kalasi yatsopano, mumangofunika kuitanitsa (simufunika kupanga chitsanzo - kuchotsa zina). Kufikira kumtundu uliwonse wa chilengedwe kumatheka powatchula ngati kusintha kwa gulu la ENV, lomwe, kwenikweni, limapangitsa kuti gululi likhale lopangidwa mwachilengedwe la chilengedwe cha chilengedwe, panthawi imodzimodziyo kusandulika kukhala chinthu chotheka chokonzekera pafupifupi dongosolo lililonse ( njira yofananira, mwachitsanzo, imapezedwa Django , pokhapo chinthu chokonzekera ndi gawo lokonzekera / phukusi lokha).

Kuyatsa/kuletsa njira yothandizira kulemba yokha kumatheka pogwiritsa ntchito njira ziwiri - enable_automatic_type_cast() ndi disable_automatic_type_cast (). Izi zitha kukhala zosavuta ngati kusintha kwa chilengedwe kuli ndi chinthu chofanana ndi JSON kapenanso Boolean mosasintha (kukhazikitsa kusintha kwa DEBUG ku Django poyerekeza kusinthika kwa chilengedwe ndi zingwe "zovomerezeka" ndi imodzi mwazochitika zofala). Koma tsopano palibe chifukwa chosinthira zingwe momveka bwino - zofunikira zambiri zomwe zayikidwa kale mu laibulale yakuya ndipo zikungoyembekezera kuti chizindikiro chichite. πŸ™‚ Kawirikawiri, kulemba kumagwira ntchito momveka bwino ndipo kumathandizira pafupifupi mitundu yonse ya deta yomwe ilipo (frozenset, zovuta ndi ma byte sanayesedwe).

Zofunikira zothandizira Python 2 zidakwaniritsidwa popanda kudzipereka konse (kusiya kutayipa ndi zina za "maswiti a shuga" amitundu yaposachedwa ya Python 3), makamaka, chifukwa cha zisanu ndi chimodzi zopezeka paliponse (kuthetsa zovuta zogwiritsa ntchito ma metaclasses). ).

Koma pali zoletsa zina:

  • Thandizo la Python 3 limatanthawuza mtundu wa 3.5 ndi apamwamba (kukhalapo kwawo mu polojekiti yanu ndi chifukwa cha ulesi kapena kusowa kufunikira kokonzanso, chifukwa ndizovuta kupeza chifukwa chomwe mudakali pa 3.4);
  • Mu Python 2.7, laibulale sigwirizana ndi kuchotsedwa kwa zilembo zamakalata. Kufotokozera apa. Koma ngati wina akufuna kukhazikitsa, ndinu olandiridwa :);

Laibulale ilinso ndi njira yodzipatula ngati pali zolakwika pakugawa. Ngati chingwecho sichinazindikiridwe ndi aliyense wa osanthula omwe alipo, mtengowo umakhalabe chingwe (m'malo mwake, pazifukwa zosavuta komanso zofananira m'mbuyo ndi malingaliro anthawi zonse a momwe zosinthika zimagwirira ntchito mu Bash).

python-shell library

Tsopano ndikuwuzani za laibulale yachiwiri (ndisiya kufotokozera zolakwika za ma analogi omwe alipo - ndizofanana ndi zomwe zafotokozedwa kwa anzeru-env. Analogues - apa ΠΈ apa).

Kawirikawiri, lingaliro la kukhazikitsidwa ndi zofunikira zake ndizofanana ndi zomwe zafotokozedwa za smart-env, monga momwe tikuonera pa chitsanzo:

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

Lingaliro ndi ili:

  1. Kalasi imodzi yomwe ikuyimira Bash mu dziko la Python;
  2. Lamulo lililonse la Bash limatchedwa ntchito ya gulu la Shell;
  3. Magawo a kuyitana kulikonse amaperekedwa muyitanidwe yofananira ya Bash;
  4. Lamulo lirilonse likuchitidwa "pano ndi tsopano" panthawi yomwe imatchedwa, i.e. njira synchronous ntchito;
  5. ndizotheka kupeza zotsatira za lamulo mu stdout, komanso code yake yobwerera;
  6. Ngati lamulo silili mu dongosolo, chosiyana chimaponyedwa.

Monga momwe zilili ndi smart-env, pali chithandizo cha Python 2 (ngakhale mwazi wopereka nsembe unkafunika) ndipo palibe chithandizo cha Python 3.0-3.4.

Mapulani opititsa patsogolo mabuku

Mutha kugwiritsa ntchito malaibulale pano: zonse zidayikidwa pa PyPI yovomerezeka. Magwero akupezeka pa Github (onani pansipa).

Ma library onse awiriwa adzapangidwa poganizira zomwe apeza kuchokera kwa omwe ali ndi chidwi. Ndipo, ngati zingakhale zovuta kupeza zatsopano zosiyanasiyana mu smart-env, ndiye mu python-shell palinso china choti muwonjezere:

  • kuthandizira kwa mafoni osaletsa;
  • kuthekera kolumikizana ndi gulu (kugwira ntchito ndi stdin);
  • kuwonjezera katundu watsopano (mwachitsanzo, katundu kulandira zotuluka kuchokera stderr);
  • kukhazikitsa chikwatu cha malamulo omwe alipo (kuti mugwiritse ntchito ndi dir () ntchito);
  • ndi zina zotero.

powatsimikizira

  1. laibulale ya smart-env: Github ΠΈ PyPI
  2. python-shell library: Github ΠΈ PyPI
  3. Telegalamu njira zosintha laibulale

UPD 23.02.2020/XNUMX/XNUMX:
* Zosungirako zasunthidwa, maulalo ofananira nawo asinthidwa
* Mtundu wa python-shell==1.0.1 ukukonzedwa kuti utulutsidwe pa 29.02.2020/XNUMX/XNUMX. Zosintha zikuphatikiza kuthandizira komaliza kwa lamulo ndi lamulo la dir(Shell), kuyendetsa malamulo ndi chozindikiritsa cha Python chosavomerezeka, ndi kukonza zolakwika.

Source: www.habr.com

Kuwonjezera ndemanga