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?
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:
Kalasi imodzi yomwe ikuyimira Bash mu dziko la Python;
Lamulo lililonse la Bash limatchedwa ntchito ya gulu la Shell;
Magawo a kuyitana kulikonse amaperekedwa muyitanidwe yofananira ya Bash;
Lamulo lirilonse likuchitidwa "pano ndi tsopano" panthawi yomwe imatchedwa, i.e. njira synchronous ntchito;
ndizotheka kupeza zotsatira za lamulo mu stdout, komanso code yake yobwerera;
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);
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.