پٿون ۽ بش دوستي ٺاهڻ: سمارٽ اين وي ۽ پٿون شيل لائبريريون

سٺو ڏينهن سڀني کي.

اڄ، پٿون نه رڳو پاڻ سافٽ ويئر پروڊڪٽس ٺاهڻ جي ميدان ۾ سڀ کان وڌيڪ استعمال ٿيندڙ ٻولين مان هڪ آهي، پر انهن جي انفراسٽرڪچر پڻ مهيا ڪري ٿي. نتيجي طور، ڪيترن ئي ديوانن کي، چاهي انهن جي مرضي سان يا ان جي خلاف، سٺي پراڻي بش اسڪرپٽ جي اضافي طور بعد ۾ استعمال لاءِ نئين ٻولي سکڻي پوندي هئي. بهرحال، بش ۽ پٿون ڪوڊ لکڻ لاءِ مختلف طريقا پيش ڪن ٿا ۽ ڪجهه خاصيتون آهن، مطلب ته بش اسڪرپٽس کي ”سانپ جي ٻولي“ ڏانهن پورٽ ڪرڻ ڪڏهن ڪڏهن هڪ قابل ۽ معمولي ڪم کان پري هوندو آهي.

ڊيوپس لاءِ زندگي کي آسان بڻائڻ لاءِ، پٿون ۾ ڪيتريون ئي ڪارآمد لائبريريون ۽ افاديتون ٺاهيا ويا آهن ۽ ٺاهيا ويندا آهن. هي مضمون هن پوسٽ جي ليکڪ پاران ٺاهيل ٻه نيون لائبريريون بيان ڪري ٿو - smart-env и python- shell - ۽ پيٿون سان ڪم ڪرڻ جي پيچيدگين تي تمام گهڻو ڌيان ڏيڻ جي ضرورت کان ڊيوپس کي رليف ڏيڻ لاءِ ڊزائين ڪيو ويو ، وڌيڪ دلچسپ ڪمن لاءِ ڪمرو ڇڏڻ. لائبريرين جي سرگرمي جو دائرو ماحوليات جي تبديلين ۽ خارجي افاديت کي شروع ڪرڻ آهي.

ڪنهن کي به دلچسپي آهي، مهرباني ڪري ٻلي ڏسو.

نئين "سائيڪل"؟

اهو لڳي ٿو، ڇو ته عام طور تي عام عملن لاء نوان پيڪيجز ٺاهي رهيا آهن؟ ڇا توهان کي os.environ ۽ subprocess استعمال ڪرڻ کان روڪي ٿو.<طريقو يا توهان جي پسند جو طبقو> سڌو؟

مان هر هڪ لائبريريءَ جي حق ۾ الڳ الڳ ثبوت پيش ڪندس.

سمارٽ-env لائبريري

توهان جي پنهنجي دماغي ٻار کي لکڻ کان اڳ، اهو آن لائن وڃڻ لاء مفيد آهي ۽ تيار ڪيل حل ڳولڻ لاء. يقينن، اتي نه ڳولڻ جو خطرو آهي جيڪو توهان کي گهربل آهي، پر اهو بلڪه هڪ "انشورنس واقعي" آهي. ضابطي جي طور تي، هي طريقو ڪم ڪري ٿو ۽ گهڻو وقت ۽ ڪوشش بچائيندو آهي.

نتيجن موجب ڳولا هيٺيون نازل ڪيو ويو:

  • اهڙا پيڪيجز آهن جيڪي اصل ۾ os.environ ڏانهن ڪالون لپيندا آهن، پر ساڳئي وقت پريشان ڪندڙ عملن جي هڪ گروپ جي ضرورت هوندي آهي (ڪلاس جو هڪ مثال ٺاهڻ، ڪالن ۾ خاص پيٽرول وغيره)؛
  • هتي سٺا پيڪيجز آهن، جيڪي، جيتوڻيڪ، سختي سان هڪ مخصوص ماحولياتي نظام سان جڙيل آهن (بنيادي طور تي ويب فريم ورڪ جهڙوڪ Django) ۽ انهي ڪري اهي مڪمل طور تي عالمگير نه آهن بغير ڪنهن فائل جي؛
  • ڪجھ نئون ڪرڻ لاءِ نادر ڪوششون آھن. مثال طور، ٽائپنگ شامل ڪريو ۽ واضع طور تي variable قدرن کي پارس ڪريو طريقن کي ڪال ڪندي جيئن
    get_<typename>(var_name)

    يا هتي هڪ وڌيڪ حل، جيڪو، بهرحال، هاڻي بي عزتي پٿون 2 جي حمايت نٿو ڪري (جيڪو، باوجود سرڪاري RIP, اتي اڃا تائين لکيل ڪوڊ جا جبل ۽ سڄي ماحولياتي نظام)؛

  • اتي اسڪول جي شاگردن جا دستور آھن جيڪي، ڪنھن نامعلوم سبب جي ڪري، اپ اسٽريم PyPI ۾ ختم ٿي ويا آھن ۽ صرف نوان پيڪيجز جي نالي سان مسئلا پيدا ڪن ٿا (خاص طور تي، نالو "سمارٽ-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 ۾ حاصل ڪيو ويو آھي، صرف اتي ئي ٺاھ جوڙ اعتراض آھي سيٽنگون ماڊل / پيڪيج پاڻ).

خودڪار ٽائپنگ سپورٽ موڊ کي فعال / غير فعال ڪرڻ ٻن طريقن سان حاصل ڪيو ويو آھي - enable_automatic_type_cast() ۽ disable_automatic_type_cast(). اهو آسان ٿي سگهي ٿو جيڪڏهن ماحولياتي متغير هڪ سيريل ٿيل JSON-جهڙو اعتراض يا اڃا به صرف هڪ Boolean مستقل (واضح طور تي ڊيبگ متغير کي ڊينگو ۾ ترتيب ڏيڻ سان ماحول جي متغير کي "درست" اسٽرنگ سان موازنہ ڪندي سڀ کان عام ڪيسن مان هڪ آهي). پر ھاڻي واضح طور تي تارن کي تبديل ڪرڻ جي ڪا ضرورت ناھي - گھڻا ضروري عمل اڳ ۾ ئي لئبرريءَ جي کوٽائي ۾ سمايل آھن ۽ صرف ڪم ڪرڻ لاءِ سگنل جي انتظار ۾ آھن. 🙂 عام طور تي، ٽائپنگ شفاف طريقي سان ڪم ڪري ٿي ۽ لڳ ڀڳ سڀني موجود بلٽ ان ڊيٽا جي قسمن کي سپورٽ ڪري ٿي (منجمد، ڪمپليڪس ۽ بائيٽ ٽيسٽ نه ڪيا ويا).

پائٿون 2 کي سپورٽ ڪرڻ جي گهرج عملي طور تي بغير ڪنهن قرباني سان لاڳو ڪئي وئي هئي (ٽائپنگ کي ڇڏي ڏيڻ ۽ پٿون 3 جي جديد نسخن جي ڪجهه ”شوگر مٺاڻ“) خاص طور تي ، هر جڳهه جي مهرباني (ميٽيڪل ڪلاس استعمال ڪرڻ جا مسئلا حل ڪرڻ لاءِ. ).

پر ڪجھ پابنديون آھن:

  • پٿون 3 سپورٽ جو مطلب آهي ورجن 3.5 ۽ ان کان وڌيڪ (توهان جي پروجيڪٽ ۾ انهن جي موجودگي يا ته سستي جو نتيجو آهي يا بهتري جي ضرورت جي کوٽ آهي، ڇو ته توهان اڃا تائين 3.4 تي ڇو آهيو ڪنهن مقصد سان اچڻ مشڪل آهي)؛
  • پٿون 2.7 ۾، لائبريري سيٽ لٽرلز جي ڊيسيريلائيزيشن کي سپورٽ نٿو ڪري. وصف هتي. پر جيڪڏهن ڪو ان تي عمل ڪرڻ چاهي ٿو، توهان کي ڀليڪار آهي :)؛

لئبرريءَ ۾ پڻ هڪ استثناءَ وارو ميکانيزم هوندو آهي جڏهن ته غلطين کي پارس ڪرڻ جي صورت ۾. جيڪڏهن اسٽرنگ کي ڪنهن به موجود تجزيه نگار جي سڃاڻپ نه ٿي سگهي، قدر هڪ تار رهي ٿو (بلڪه، سهولت جي سببن ۽ عام منطق سان پسمانده مطابقت جي ڪري ته ڪيئن متغير Bash ۾ ڪم ڪن ٿا).

python-shell لائبريري

ھاڻي مان توھان کي ٻئي لائبريريءَ جي باري ۾ ٻڌايان ٿو (مان موجوده اينالاگس جي گھٽتائي جي وضاحت کي ڇڏي ڏيندس- اھو سمارٽ-env. اينالاگس لاءِ بيان ڪيل جھڙو ئي آھي. هتي и هتي).

عام طور تي، عمل درآمد جو خيال ۽ ان لاءِ گهربل ضرورتون سمارٽ-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. ھڪڙو طبقو جيڪو پٿون دنيا ۾ بش جي نمائندگي ڪري ٿو؛
  2. هر بش ڪمانڊ کي شيل ڪلاس جي فنڪشن سڏيو ويندو آهي.
  3. هر فنڪشن ڪال لاءِ پيرا ميٽر پوءِ لاڳاپيل بش ڪمانڊ ڪال ۾ گذري ويا آهن؛
  4. هر حڪم تي عمل ڪيو ويو آهي "هتي ۽ هاڻي" هن وقت ان کي سڏيو ويندو آهي، يعني. هم وقت سازي جو طريقو ڪم ڪندو آهي؛
  5. اهو ممڪن آهي ته stdout ۾ هڪ حڪم جي پيداوار تائين رسائي، انهي سان گڏ ان جي واپسي ڪوڊ؛
  6. جيڪڏهن حڪم سسٽم ۾ نه آهي، هڪ استثنا اڇلايو ويو آهي.

جيئن سمارٽ اين وي سان، اتي پٿون 2 لاءِ سپورٽ آهي (جيتوڻيڪ ٿورو وڌيڪ قرباني رت جي ضرورت هئي) ۽ پٿون 3.0-3.4 لاءِ ڪا به مدد ناهي.

لائبريري جي ترقي جو منصوبو

توھان ھاڻي استعمال ڪري سگھوٿا لائبريريون: ٻئي پوسٽ ٿيل آھن سرڪاري PyPI تي. ذريعا Github تي موجود آهن (هيٺ ڏسو).

ٻنهي لائبرريءَ کي ترقي ڏني ويندي جنهن ۾ دلچسپي رکندڙن کان گڏ ڪيل راءِ جي حساب سان. ۽، جيڪڏهن اهو مشڪل ٿي سگھي ٿو ته مختلف قسم جي نئين خاصيتن سان گڏ اچي سمارٽ-env، پوء python-shell ۾ ضرور شامل ڪرڻ لاء ڪجهه ٻيو آهي:

  • غير بلاڪ ڪالن لاءِ سپورٽ؛
  • ٽيم سان رابطي واري رابطي جو امڪان (اسٽڊين سان ڪم ڪرڻ)؛
  • نئين ملڪيت شامل ڪرڻ (مثال طور، ملڪيت stderr کان ٻاھر حاصل ڪرڻ لاء)؛
  • دستياب حڪمن جي ڊاريڪٽري تي عمل درآمد (ڊائريڪشن سان استعمال ڪرڻ لاء)؛
  • ۽ وغيره تي.

حوالن

  1. سمارٽ-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) ڪمانڊ لاءِ سپورٽ، غلط پٿون سڃاڻپ ڪندڙ سان ڪمانڊ هلائڻ، ۽ بگ فيڪس شامل آھن.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو