Python සහ Bash මිත්‍රත්වය ඇති කිරීම: smart-env සහ python-shell පුස්තකාල

සුභ දවසක් හැමෝටම.

අද, පයිතන් යනු මෘදුකාංග නිෂ්පාදන පමණක් නොව ඒවායේ යටිතල පහසුකම් සැපයීමේ ක්ෂේත්‍රයේ වැඩිපුරම භාවිතා වන භාෂාවකි. එහි ප්‍රතිඵලයක් වශයෙන්, බොහෝ devops හට, ඔවුන්ගේ කැමැත්තෙන් හෝ ඊට විරුද්ධ වුවත්, හොඳ පැරණි Bash පිටපත් සඳහා අතිරේකයක් ලෙස පසුකාලීන භාවිතය සඳහා නව භාෂාවක් ඉගෙන ගැනීමට සිදු විය. කෙසේ වෙතත්, Bash සහ Python කේත ලිවීමට විවිධ ප්‍රවේශයන් ප්‍රකාශ කරන අතර යම් යම් විශේෂාංග ඇත, එනම් Bash ස්ක්‍රිප්ට් “සර්ප භාෂාවට” ගෙනයාම සමහර විට ධාරිතාවයෙන් යුත් සහ සුළු කාර්යයක් නොවන බව පෙනේ.

devops සඳහා ජීවිතය පහසු කිරීම සඳහා, Python හි බොහෝ ප්‍රයෝජනවත් පුස්තකාල සහ උපයෝගිතා නිර්මාණය කර ඇති අතර ඒවා දිගටම නිර්මාණය වෙමින් පවතී. මෙම ලිපියේ කතුවරයා විසින් නිර්මාණය කරන ලද නව පුස්තකාල දෙකක් මෙම ලිපිය විස්තර කරයි - smart-env и python-shell - සහ පයිතන් සමඟ වැඩ කිරීමේ සංකීර්ණතා කෙරෙහි වැඩි අවධානයක් යොමු කිරීමේ අවශ්‍යතාවයෙන් devops නිදහස් කිරීම සඳහා නිර්මාණය කර ඇති අතර, වඩාත් රසවත් කාර්යයන් සඳහා ඉඩ ලබා දේ. පුස්තකාලවල ක්රියාකාරිත්වයේ විෂය පථය වන්නේ පාරිසරික විචල්යයන් සහ බාහිර උපයෝගිතා දියත් කිරීමයි.

කැමති ඕනෑම කෙනෙක්, cat බලන්න.

නව "බයිසිකල්"?

තරමක් සාමාන්‍ය මෙහෙයුම් සඳහා නව පැකේජ නිර්මාණය කරන්නේ ඇයි? os.environ සහ subprocess.<ක්‍රමය හෝ ඔබ කැමති පන්තිය> කෙලින්ම භාවිතා කිරීමෙන් ඔබව වළක්වන්නේ කුමක්ද?

මම එක් එක් පුස්තකාලයට පක්ෂව සාක්ෂි වෙන වෙනම ඉදිරිපත් කරමි.

smart-env පුස්තකාලය

ඔබේම මොළය ලිවීමට පෙර, අන්තර්ජාලයට ගොස් සූදානම් කළ විසඳුම් සෙවීම ප්රයෝජනවත් වේ. ඇත්ත වශයෙන්ම, ඔබට අවශ්ය දේ සොයා නොගැනීමේ අවදානමක් ඇත, නමුත් මෙය "රක්ෂණ සිදුවීමක්" වේ. රීතියක් ලෙස, මෙම ප්රවේශය ක්රියා කරන අතර බොහෝ කාලයක් හා වෑයමක් ඉතිරි කරයි.

ප්රතිඵල අනුව සෙවීම පහත කරුණු අනාවරණය විය.

  • ඇත්ත වශයෙන්ම os.environ වෙත ඇමතුම් එවන පැකේජ ඇත, නමුත් ඒ සමඟම අවධානය වෙනතකට යොමු කරන ක්‍රියා රාශියක් අවශ්‍ය වේ (පන්තියක අවස්ථාවක් නිර්මාණය කිරීම, ඇමතුම්වල විශේෂ පරාමිතීන් ආදිය);
  • හොඳ පැකේජ ඇත, කෙසේ වෙතත්, නිශ්චිත පරිසර පද්ධතියකට (ප්‍රධාන වශයෙන් ජැන්ගෝ වැනි වෙබ් රාමු) තදින් බැඳී ඇති අතර එබැවින් ගොනුවක් නොමැතිව විශ්වීය නොවේ;
  • අලුත් දෙයක් කිරීමට දුර්ලභ උත්සාහයන් ඇත. උදාහරණ වශයෙන්, ටයිප් කිරීම එකතු කරන්න සහ වැනි ක්‍රම ඇමතීමෙන් විචල්‍ය අගයන් පැහැදිලිව විග්‍රහ කරන්න
    get_<typename>(var_name)

    නැත්නම් මෙතන තවත් එක් විසඳුමක්, කෙසේ වෙතත්, එය දැන් අපකීර්තියට පත් Python 2 සඳහා සහය නොදක්වයි (එසේ වුවද නිල RIP, ලිඛිත කේතය සහ සමස්ත පරිසර පද්ධතිවල කඳු තවමත් පවතී);

  • පාසල්-ශිෂ්‍ය ශිල්ප ඇත, එය කිසියම් නොදන්නා හේතුවක් නිසා, උඩුගං PyPI හි අවසන් වී නව පැකේජ නම් කිරීමේදී පමණක් ගැටළු ඇති කරයි (විශේෂයෙන්, “ස්මාර්ට්-එන්වී” යන නම අවශ්‍ය පියවරකි).

තවද මෙම ලැයිස්තුව දිගු කලක් පැවතිය හැකිය. කෙසේ වෙතත්, පහසු සහ විශ්වීය දෙයක් කිරීමේ අදහස ගැන මා උද්දීපනය කිරීමට ඉහත කරුණු ප්‍රමාණවත් විය.

Smart-env ලිවීමට පෙර සකසා ඇති අවශ්‍යතා:

  • වඩාත්ම සරල භාවිත යෝජනා ක්රමය
  • පහසුවෙන් වින්‍යාසගත කළ හැකි දත්ත ටයිප් කිරීමේ සහාය
  • පයිතන් 2.7 අනුකූල වේ
  • පරීක්ෂණ මගින් හොඳ කේත ආවරණයක්

අවසානයේ මේ සියල්ල අවබෝධ විය. භාවිතයේ උදාහරණයක් මෙන්න:

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

ඔබට උදාහරණයෙන් පෙනෙන පරිදි, නව පන්තියක් සමඟ වැඩ කිරීමට, ඔබට එය ආයාත කිරීමට අවශ්‍ය වේ (ඔබට උදාහරණයක් සෑදීමට අවශ්‍ය නැත - අමතර ක්‍රියාව අඩු කරන්න). ඕනෑම පරිසර විචල්‍යයකට ප්‍රවේශය සාක්ෂාත් කරගනු ලබන්නේ එය ENV පන්තියේ විචල්‍යයක් ලෙස හැඳින්වීමෙනි, ඇත්ත වශයෙන්ම, මෙම පන්තිය ස්වදේශීය පද්ධති පරිසරය සඳහා බුද්ධිමය දවටනයක් බවට පත් කරන අතරම එය ඕනෑම පද්ධතියකට පාහේ කළ හැකි වින්‍යාස වස්තුවක් බවට පත් කරයි ( උදාහරණයක් ලෙස, Django හි සමාන ප්‍රවේශයක් සාක්ෂාත් කරගනු ලැබේ, එහි වින්‍යාස වස්තුව වන්නේ සැකසුම් මොඩියුලය/පැකේජය පමණි).

ස්වයංක්‍රීය ටයිප් කිරීමේ සහය ප්‍රකාරය සක්‍රීය කිරීම/අබල කිරීම ක්‍රම දෙකක් භාවිතයෙන් සිදු කෙරේ - enable_automatic_type_cast() සහ disable_automatic_type_cast(). පරිසර විචල්‍යයේ අනුක්‍රමික JSON වැනි වස්තුවක් හෝ හුදෙක් බූලියන් නියතයක් හෝ තිබේ නම් මෙය පහසු විය හැක (පරිසර විචල්‍යය "වලංගු" තන්තු සමඟ සංසන්දනය කිරීමෙන් Django හි DEBUG විචල්‍යය පැහැදිලිව සැකසීම වඩාත් පොදු අවස්ථාවකි). නමුත් දැන් පැහැදිලිවම නූල් පරිවර්තනය කිරීමට අවශ්‍ය නැත - අවශ්‍ය ක්‍රියා බොහොමයක් දැනටමත් පුස්තකාලයේ ගැඹුරට කාවැදී ඇති අතර ක්‍රියා කිරීමට සංඥාවක් බලා සිටියි. 🙂 සාමාන්‍යයෙන්, ටයිප් කිරීම විනිවිද පෙනෙන ලෙස ක්‍රියා කරන අතර ලබා ගත හැකි සියලුම බිල්ට් දත්ත වර්ග සඳහාම පාහේ සහය දක්වයි (ශීතකරණය, සංකීර්ණ සහ බයිට් පරීක්ෂා කර නොමැත).

Python 2 සඳහා සහය දැක්වීමේ අවශ්‍යතාවය ප්‍රායෝගිකව කිසිදු කැපකිරීමකින් තොරව ක්‍රියාත්මක කරන ලදී (ටයිප් කිරීම අතහැර දැමීම සහ Python 3 හි නවතම අනුවාද වල “සීනි කැන්ඩි” සමහරක්), විශේෂයෙන්, සෑම තැනකම ඇති හයට ස්තූතියි (මෙටාක්ලාස් භාවිතා කිරීමේ ගැටළු විසඳීම සඳහා. )

නමුත් සමහර සීමාවන් තිබේ:

  • Python 3 සහය යන්නෙන් අදහස් වන්නේ 3.5 සහ ඉහළ අනුවාදයයි (ඔවුන් ඔබේ ව්‍යාපෘතියේ සිටීම කම්මැලිකමේ හෝ වැඩි දියුණු කිරීම් අවශ්‍යතාවයේ ඌනතාවයේ ප්‍රතිඵලයකි, මන්ද ඔබ තවමත් 3.4 මත සිටින්නේ මන්ද යන්න වෛෂයික හේතුවක් ඉදිරිපත් කිරීමට අපහසු බැවින්);
  • Python 2.7 හි, පුස්තකාලය සකසන ලද වචනවල deserialization සඳහා සහාය නොදක්වයි. විස්තර මෙහි. නමුත් එය ක්රියාත්මක කිරීමට අවශ්ය නම්, ඔබ සාදරයෙන් පිළිගනිමු :);

විග්‍රහ කිරීමේ දෝෂ වලදී පුස්තකාලයට ව්‍යතිරේක යාන්ත්‍රණයක් ද ඇත. පවතින කිසිදු විශ්ලේෂකයකින් තන්තුව හඳුනාගත නොහැකි නම්, අගය තන්තුවක් ලෙස පවතී (ඒ වෙනුවට, පහසුව සඳහා සහ Bash හි විචල්‍යයන් ක්‍රියා කරන ආකාරය පිළිබඳ සාමාන්‍ය තර්කනය සමඟ පසුගාමී අනුකූලතාව සඳහා).

python-shell පුස්තකාලය

දැන් මම ඔබට දෙවන පුස්තකාලය ගැන කියන්නම් (පවතින ප්‍රතිසමවල අඩුපාඩු පිළිබඳ විස්තරය මම මග හරිමි - එය ස්මාර්ට්-එන්වි. ඇනලොග් සඳහා විස්තර කර ඇති ආකාරයට සමාන වේ - මෙහි и මෙහි).

පොදුවේ ගත් කල, ක්‍රියාත්මක කිරීමේ අදහස සහ ඒ සඳහා වන අවශ්‍යතා smart-env සඳහා විස්තර කර ඇති ඒවාට සමාන වේ, උදාහරණයෙන් දැකිය හැකිය:

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

අදහස මෙයයි:

  1. පයිතන් ලෝකයේ Bash නියෝජනය කරන තනි පන්තියක්;
  2. සෑම Bash විධානයක්ම Shell පන්තියේ කාර්යයක් ලෙස හැඳින්වේ;
  3. එක් එක් ශ්‍රිත ඇමතුම් සඳහා වන පරාමිති පසුව අදාල Bash විධාන ඇමතුම වෙත යවනු ලැබේ;
  4. සෑම විධානයක්ම එය හැඳින්වෙන මොහොතේ "මෙතැන සහ දැන්" ක්රියාත්මක වේ, i.e. සමමුහුර්ත ප්රවේශය ක්රියා කරයි;
  5. stdout හි විධානයක ප්‍රතිදානය මෙන්ම එහි ආපසු කේතය වෙත ප්‍රවේශ විය හැකිය;
  6. විධානය පද්ධතියේ නොමැති නම්, ව්යතිරේකයක් දමනු ලැබේ.

smart-env මෙන්ම, Python 2 සඳහා සහය ඇත (තව ටිකක් පූජා කිරීමේ ලේ අවශ්‍ය වුවද) සහ Python 3.0-3.4 සඳහා සහය නොමැත.

පුස්තකාල සංවර්ධන සැලසුම්

ඔබට දැන් පුස්තකාල භාවිතා කළ හැක: දෙකම නිල PyPI මත පළ කර ඇත. මූලාශ්‍ර Github හි ඇත (පහත බලන්න).

උනන්දුවක් දක්වන අයගෙන් එකතු කරන ප්‍රතිපෝෂණ සැලකිල්ලට ගනිමින් පුස්තකාල දෙකම සංවර්ධනය කෙරේ. තවද, smart-env හි විවිධ නව විශේෂාංග ඉදිරිපත් කිරීම අපහසු විය හැකි නම්, python-shell හි අනිවාර්යයෙන්ම එකතු කිරීමට තවත් දෙයක් තිබේ:

  • අවහිර නොවන ඇමතුම් සඳහා සහාය;
  • කණ්ඩායම සමඟ අන්තර්ක්‍රියාකාරී සන්නිවේදනයේ හැකියාව (stdin සමඟ වැඩ කිරීම);
  • නව ගුණාංග එකතු කිරීම (උදාහරණයක් ලෙස, stderr වෙතින් ප්රතිදානය ලබා ගැනීමට දේපල);
  • පවතින විධාන නාමාවලියක් ක්‍රියාත්මක කිරීම (dir() ශ්‍රිතය සමඟ භාවිතා කිරීම සඳහා);
  • සහ එසේ ය.

යොමු

  1. smart-env පුස්තකාලය: Github и පයිපී
  2. python-shell පුස්තකාලය: Github и පයිපී
  3. ටෙලිග්‍රාම් නාලිකාව පුස්තකාල යාවත්කාලීන

UPD 23.02.2020/XNUMX/XNUMX:
* නිධිය ගෙන ගොස් ඇත, අනුරූප සබැඳි යාවත්කාලීන කර ඇත
* python-shell==1.0.1 අනුවාදය 29.02.2020/XNUMX/XNUMX නිකුත් කිරීමට සූදානම් වෙමින් පවතී. වෙනස්කම් වලට විධාන ස්වයංක්‍රීය සම්පූර්ණ කිරීම සහ dir(Shell) විධානය සඳහා සහය දැක්වීම, වලංගු නොවන Python හඳුනාගැනීමක් සහිත විධානයන් ක්‍රියාත්මක කිරීම සහ දෝෂ නිවැරදි කිරීම් ඇතුළත් වේ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න