Python እና Bash ጓደኛ ማድረግ፡ smart-env እና python-shell ላይብረሪዎች

መልካም ቀን ለሁላችሁም።

ዛሬ ፓይዘን የሶፍትዌር ምርቶችን እራሳቸው ብቻ ሳይሆን መሠረተ ልማቶቻቸውን በማቅረብ ረገድ በጣም ከሚጠቀሙባቸው ቋንቋዎች አንዱ ነው። በውጤቱም፣ በፍላጎታቸውም ይሁን በተቃወመው፣ ብዙ ዱፖፖች፣ ለጥሩው የባሽ ስክሪፕቶች ማሟያ የሚሆን አዲስ ቋንቋ መማር ነበረባቸው። ሆኖም ባሽ እና ፓይዘን ኮድ ለመፃፍ የተለያዩ አቀራረቦችን ይናገራሉ እና የተወሰኑ ባህሪያት አሏቸው፣ ይህ ማለት የባሽ ስክሪፕቶችን ወደ “እባብ ቋንቋ” ማስተላለፍ አንዳንድ ጊዜ አቅም ያለው እና ከቀላል ስራ የራቀ ይሆናል።

ህይወትን ለዴፕስ ቀላል ለማድረግ በፓይዘን ውስጥ ብዙ ጠቃሚ ቤተ-መጻሕፍት እና መገልገያዎች ተፈጥረዋል እና መፈጠሩን ቀጥለዋል። ይህ ጽሑፍ በዚህ ጽሑፍ ጸሐፊ የተፈጠሩ ሁለት አዳዲስ ቤተ-መጻሕፍትን ይገልጻል- smart-env и ፓይቶን-ሼል - እና ለበለጠ አስደሳች ስራዎች ቦታ በመተው ከፓይዘን ጋር አብሮ ለመስራት ውስብስብነት ብዙ ትኩረት የመስጠት ፍላጎትን ለማስወገድ ዲፖፖችን ለማስታገስ የተቀየሰ ነው። የቤተ-መጻህፍት እንቅስቃሴ ወሰን የአካባቢ ተለዋዋጮች እና የውጭ መገልገያዎችን ማስጀመር ነው።

ፍላጎት ያለው ማንኛውም ሰው፣ እባክዎን ድመት ይመልከቱ።

አዲስ "ብስክሌቶች"?

ለምንድነው ለመደበኛ ተራ ስራዎች አዲስ ፓኬጆችን መፍጠር የሚመስለው? os.environ እና ንዑስ ሂደትን ከመጠቀም የሚከለክለው ምንድን ነው<የመረጡት ዘዴ ወይም ክፍል> በቀጥታ?

ለእያንዳንዱ ቤተ-መጻሕፍት የሚደግፍ ማስረጃ አቀርባለሁ።

smart-env ላይብረሪ

የራስዎን የአዕምሮ ልጅ ከመጻፍዎ በፊት, በመስመር ላይ መሄድ እና ዝግጁ መፍትሄዎችን መፈለግ ጠቃሚ ነው. በእርግጥ, የሚፈልጉትን የማግኘት አደጋ አለ, ነገር ግን ይህ ይልቁንም "የኢንሹራንስ ክስተት" ነው. እንደ ደንቡ, ይህ አቀራረብ ይሰራል እና ብዙ ጊዜ እና ጥረት ይቆጥባል.

በውጤቶቹ መሠረት ይፈልጉ የሚከተለው ተገለጠ።

  • በእውነቱ ወደ os.environ ጥሪዎችን የሚያጠቃልሉ ጥቅሎች አሉ ፣ ግን በተመሳሳይ ጊዜ ብዙ ትኩረት የሚከፋፍሉ ድርጊቶችን ይፈልጋሉ (የክፍል ምሳሌ መፍጠር ፣ በጥሪዎች ውስጥ ልዩ መለኪያዎች ፣ ወዘተ.);
  • ጥሩ ፓኬጆች አሉ, ሆኖም ግን, ከተወሰነ የስነ-ምህዳር (በተለይም እንደ Django ያሉ የድር ማዕቀፎች) በጥብቅ የተሳሰሩ ናቸው, እና ስለዚህ ያለፋይል በሁሉም ዓለም አቀፋዊ አይደሉም;
  • አዲስ ነገር ለማድረግ ብርቅዬ ሙከራዎች አሉ። ለምሳሌ, መተየብ ጨምር እና እንደዚህ ያሉ ዘዴዎችን በመጥራት ተለዋዋጭ እሴቶችን በግልፅ ይተነትኑ
    get_<typename>(var_name)

    ወይም እዚህ አንድ ተጨማሪ መፍትሄ, ሆኖም ግን, አሁን የተዋረደውን Python 2 አይደግፍም (ይህ ቢሆንም ኦፊሴላዊ RIP፣ አሁንም ተራሮች የጽሑፍ ኮድ እና አጠቃላይ ሥነ-ምህዳሮች አሉ);

  • ባልታወቀ ምክንያት ወደ ላይኛው PyPI ያበቁ እና አዲስ ፓኬጆችን በመሰየም ላይ ችግር የሚፈጥሩ የት/ቤት ተማሪ የእጅ ስራዎች አሉ (በተለይም “smart-env” የሚለው ስም አስፈላጊ መለኪያ ነው)።

እና ይህ ዝርዝር ለረጅም ጊዜ ሊቀጥል ይችላል. ሆኖም ፣ አንድ ነገር ምቹ እና ሁለንተናዊ የማድረጉን ሀሳብ ለማስደሰት ከላይ ያሉት ነጥቦች በቂ ነበሩ።

smart-env ከመጻፍዎ በፊት የተቀመጡ መስፈርቶች፡-

  • በጣም ቀላሉ የአጠቃቀም ዘዴ
  • በቀላሉ ሊዋቀር የሚችል የውሂብ መተየብ ድጋፍ
  • Python 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 ውስጥ ይገኛል, እዚያ ብቻ የማዋቀሪያው ነገር የቅንጅቶች ሞጁል / ጥቅል እራሱ ነው).

አውቶማቲክ የትየባ የድጋፍ ሁነታን ማንቃት/ማሰናከል ሁለት ዘዴዎችን በመጠቀም የተገኘ ነው - አንቃ_automatic_type_cast() እና disable_automatic_type_cast()። የአካባቢ ተለዋዋጭ ተከታታይ JSON መሰል ነገርን ወይም የቦሊያን ቋሚን ብቻ ከያዘ ይህ ምቹ ሊሆን ይችላል (የአካባቢውን ተለዋዋጭ ከ "ትክክለኛ" ሕብረቁምፊዎች ጋር በማነፃፀር በግልጽ የDEBUG ተለዋዋጭን በጃንጎ ማዘጋጀት በጣም ከተለመዱት ጉዳዮች ውስጥ አንዱ ነው)። አሁን ግን ሕብረቁምፊዎችን በግልፅ መለወጥ አያስፈልግም - አብዛኛዎቹ አስፈላጊ ድርጊቶች ቀድሞውኑ በቤተ-መጽሐፍት ጥልቀት ውስጥ ተካትተዋል እና እርምጃ ለመውሰድ ምልክት እየጠበቁ ናቸው. 🙂 በአጠቃላይ ፣ መተየብ በግልፅ ይሰራል እና ሁሉንም የሚገኙትን አብሮ የተሰሩ የውሂብ አይነቶችን ይደግፋል (የቀዘቀዘ ፣ ውስብስብ እና ባይት አልተሞከሩም)።

ፓይዘን 2ን ለመደገፍ የሚያስፈልገው መስፈርት ምንም መስዋዕትነት ሳይኖረው ተተግብሯል (መተየብ መተው እና አንዳንድ የቅርብ ጊዜዎቹ የ Python 3 ስሪቶች “ስኳር ከረሜላዎች”) ፣ በተለይም በሁሉም ቦታ ለሚገኙ ስድስት ምስጋናዎች (የሜታክላስ አጠቃቀምን ችግሮች ለመፍታት) .

ግን አንዳንድ ገደቦች አሉ-

  • Python 3 ድጋፍ ማለት ስሪት 3.5 እና ከዚያ በላይ ማለት ነው (በእርስዎ ፕሮጀክት ውስጥ መገኘታቸው የስንፍና ወይም የማሻሻያ ፍላጎት እጦት ውጤት ነው ፣ አሁንም በ 3.4 ላይ ለምን እንደነበሩ ተጨባጭ ምክንያት ለማምጣት አስቸጋሪ ስለሆነ)
  • በፓይዘን 2.7፣ ቤተ-መጻሕፍቱ የተቀመጡ ቃል በቃል መገለልን አይደግፍም። መግለጫ እዚህ. ግን ማንም ሊተገብረው ከፈለገ እንኳን ደህና መጣችሁ :);

ቤተ መጻሕፍቱ ስህተቶችን በሚተነተኑበት ጊዜ ልዩ ዘዴም አለው። ሕብረቁምፊው በማንኛውም የሚገኙ ተንታኞች ሊታወቅ ካልቻለ፣ እሴቱ ሕብረቁምፊ ሆኖ ይቀራል (ይልቁንስ ለምቾት ምክንያቶች እና ተለዋዋጮች በባሽ ውስጥ እንዴት እንደሚሠሩ ከተለመደው አመክንዮ ጋር)።

python-ሼል ቤተ መጻሕፍት

አሁን ስለ ሁለተኛው ቤተ-መጽሐፍት እነግርዎታለሁ (የነባር የአናሎጎችን ድክመቶች መግለጫ እተወዋለሁ - ለስማርት-ኤንቪ. አናሎግ ከተገለጸው ጋር ተመሳሳይ ነው - እዚህ и እዚህ).

በአጠቃላይ ፣ የአተገባበሩ ሀሳብ እና ለእሱ የሚያስፈልጉት መስፈርቶች ለ 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. እያንዳንዱ የባሽ ትዕዛዝ እንደ የሼል ክፍል ተግባር ተብሎ ይጠራል;
  3. ለእያንዳንዱ የተግባር ጥሪ መለኪያዎች ወደ ተጓዳኝ የ Bash ትዕዛዝ ጥሪ ይተላለፋሉ;
  4. እያንዳንዱ ትዕዛዝ በተጠራበት ጊዜ "እዚህ እና አሁን" ይፈጸማል, ማለትም. የተመሳሰለው አቀራረብ ይሠራል;
  5. በ stdout ውስጥ የትዕዛዙን ውፅዓት ፣ እንዲሁም የመመለሻ ኮዱን ማግኘት ይቻላል ፣
  6. ትዕዛዙ በሲስተሙ ውስጥ ካልሆነ ልዩ ሁኔታ ይጣላል.

እንደ ስማርት-ኤንቪ፣ ለፓይዘን 2 ድጋፍ አለ (ምንም እንኳን ትንሽ ተጨማሪ መስዋዕት የሆነ ደም ቢያስፈልግም) እና ለ Python 3.0-3.4 ድጋፍ የለም።

የቤተ መፃህፍት ልማት እቅዶች

ቤተ መፃህፍቶቹን አሁን መጠቀም ትችላለህ፡ ሁለቱም በይፋዊው ፒፒአይ ላይ ተለጥፈዋል። ምንጮች Github ላይ ይገኛሉ (ከዚህ በታች ይመልከቱ)።

ሁለቱም ቤተ-መጻሕፍት የሚዘጋጁት ከሚመለከታቸው የሚሰበሰበውን አስተያየት ግምት ውስጥ በማስገባት ነው። እና፣ በ smart-env ውስጥ የተለያዩ አዳዲስ ባህሪያትን ማምጣት አስቸጋሪ ከሆነ፣ በ python-shell ውስጥ በእርግጠኝነት የሚታከል ሌላ ነገር አለ፡-

  • ላልከለከሉ ጥሪዎች ድጋፍ;
  • ከቡድኑ ጋር በይነተገናኝ ግንኙነት የመፍጠር እድል (ከ stdin ጋር አብሮ መሥራት);
  • አዲስ ንብረቶችን መጨመር (ለምሳሌ ከ stderr ምርት ለመቀበል ንብረት);
  • የሚገኙትን ትዕዛዞች ማውጫ መተግበር (ከ dir () ተግባር ጋር ለመጠቀም;
  • እና የመሳሰሉት.

ማጣቀሻዎች

  1. smart-env ላይብረሪ፡- የፊልሙ и ፒ ፒ አይ
  2. python-shell ላይብረሪ፡- የፊልሙ и ፒ ፒ አይ
  3. የቴሌግራም ቻናል የቤተ መፃህፍት ዝማኔዎች

UPD 23.02.2020፡
* ማከማቻዎች ተንቀሳቅሰዋል፣ ተጓዳኝ አገናኞች ተዘምነዋል
* ስሪት python-shell==1.0.1 በ29.02.2020/XNUMX/XNUMX ለመለቀቅ እየተዘጋጀ ነው። ለውጦች የትዕዛዝ ራስ-አጠናቅቅ እና የዲር(ሼል) ትእዛዝ ድጋፍን፣ ትእዛዞችን ልክ ባልሆነ የፓይዘን ለዪ እና የሳንካ ጥገናዎችን ያካትታሉ።

ምንጭ: hab.com

አስተያየት ያክሉ