ازگر اور باش دوستی بنانا: python-shell اور smart-env v لائبریریوں کی رہائی۔ 1.0.1

سب کو اچھا دن!

فروری 29 2020 سال لائبریریوں کی سرکاری مائیکرو ریلیز ہوئی۔ smart-env и ازگر کا خول. ان لوگوں کے لیے جو نہیں جانتے، میرا مشورہ ہے کہ آپ اسے پہلے پڑھیں پہلی پوسٹ.

مختصراً، تبدیلیوں میں کمانڈ کی تکمیل، کمانڈ چلانے کے لیے توسیعی صلاحیتیں، کچھ ری فیکٹرنگ اور بگ فکسز شامل ہیں۔

تفصیلات کے لیے براہ کرم بلی دیکھیں۔

python-shell میں نیا کیا ہے؟

میں ابھی میٹھے کے ساتھ شروع کروں گا۔

کمانڈ کی تکمیل

اتفاق کریں - یہ آسان ہے جب ایڈیٹر/IDE/ٹرمینل آپ کو کمانڈ کے نام کا اشارہ کرے، اور بعض اوقات کال کے پیرامیٹرز بھی؟ لہذا python-shell بتدریج اسی طرح کی فعالیت فراہم کرنے میں پیشرفت کر رہا ہے۔ اس حقیقت کی وجہ سے کہ ہڈ کے نیچے شیل کلاس کے فیلڈز ڈی فیکٹو ہیں نہ کہ اس کے فیلڈز (ہر جگہ __getattr__)، خودکار تکمیل بھی شروع سے بنائی گئی تھی (بالترتیب __dir__ طریقہ کو اوور لوڈ کرکے)۔ خودکار تکمیل فی الحال BPython اور IPython ماحول میں کام کرتی ہے۔ بلاشبہ، میں PyCharm جیسی زیادہ قابل احترام مصنوعات کے ساتھ انضمام دیکھنا چاہوں گا، اور اس سمت میں عمل درآمد کے امکانات کا مطالعہ کیا جا رہا ہے۔

پراپرٹیز شامل کرنا

ریلیز کے حصے کے طور پر، شیل کلاس کو ایک نئی لاسٹ_کمانڈ پراپرٹی ملی۔ اس کی ضرورت اس لیے پیش آئی کہ جب ShellException کو غیر صفر ریٹرن کوڈ کے ساتھ کمانڈ کے ذریعے پھینکا گیا تو کمانڈ آبجیکٹ کو __call__() کال سے کمانڈ آبجیکٹ کو واپس نہیں کیا گیا۔ اب ایسا کرنے کا ایک موقع ہے:

try:
    command = Shell.touch('/foo.txt')
except ShellException:
    command = Shell.last_command

کمانڈ آبجیکٹ کی خصوصیات کی فہرست بھی پھیل گئی ہے۔ ایک ایرر فیلڈ شامل کیا گیا جو کمانڈ آؤٹ پٹ کو ایرر اسٹریم میں لوٹاتا ہے۔

غلط Python ناموں کے ساتھ کمانڈ چلانا

تقریباً ہر سسٹم میں کم از کم ایک پروگرام ہوتا ہے جس کا نام Python میں شناخت کنندہ کے طور پر موزوں نہیں ہوتا ہے (مثال کے طور پر معروف 2to3 یوٹیلیٹی)۔ اسے ساتھ بلاؤ

Shell.2to3()

اگر یہ کام نہیں کرتا ہے، تو مترجم اسے گزرنے نہیں دے گا۔
حل یہ ہے کہ کمانڈ کو چکر کے راستے میں کال کریں:

Shell("2to3")  # возвращает объект команды

یہ بات قابل غور ہے کہ اسی طرح آپ ایسے کمانڈز چلا سکتے ہیں جو مترجم کے نقطہ نظر سے درست ہوں، جس سے لچکدار اسکرپٹ بنانے کا موقع باقی رہ جاتا ہے۔

cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)

چھوٹی موٹی تبدیلیاں

  • کمانڈ کلاس آبجیکٹ کے __repr__() اور __str__() طریقوں کو لاگو کیا گیا ہے، جو اب بدیہی قدریں تیار کرتے ہیں (بالترتیب پیرامیٹرز اور اس کے stdout آؤٹ پٹ کے ساتھ کمانڈ)۔
  • معمولی کوڈ کی اصلاحات۔
  • ٹیسٹ کوریج کو شامل کرنا، نیز موجودہ کو دوبارہ منظم کرنا۔
  • سب پروسیس اور پروسیس کلاسز کو شامل کرنا، جس کا مقصد سب پروسیس ماڈیول کے ساتھ کام کرتے وقت تجرید کی ایک اضافی سطح پیدا کرنا ہے۔ Python 2/3 کے ساتھ کام کرتے وقت زیادہ تر کوڈ کی نقل کو ختم کرنے کی ضرورت ہوتی ہے، لیکن ممکنہ طور پر دوسرے بونس بھی فراہم کر سکتے ہیں۔

smart-env میں نیا کیا ہے؟

python-shell کے برعکس، smart-env لائبریری میں کم تبدیلیاں ہوئی ہیں۔ اس کی وجہ سادہ ہے - فارغ وقت کی کمی، جس کے دوران کچھ ممکنہ بہتری (مثال کے طور پر، ماحولیاتی متغیرات کی خودکار تکمیل) کو اگلی ریلیز میں منتقل کیا گیا تھا۔

درحقیقت، لائبریری میں درج ذیل تبدیلیاں کی گئی ہیں۔

  • معمولی کوڈ کی اصلاحات۔
  • ریفیکٹرنگ۔
  • موجودہ ٹیسٹوں کی تنظیم نو اور تطہیر۔

اگلی ریلیز کے لیے پلان

python-shell لائبریری

  • نان بلاکنگ کمانڈ کالز کے لیے سپورٹ شامل کرنا (عمل درآمد کا متوازی)۔

smart-env لائبریری

  • ENV کلاس میں ماحولیاتی متغیرات کی خودکار تکمیل کا نفاذ۔
  • env متغیر کے وجود کو جانچنے کے لیے in آپریٹر کے لیے سپورٹ۔
  • ENV کلاس کے لیے str() اور repr() فنکشنز کے لیے سپورٹ کا نفاذ۔

اگلی ریلیز کی تاریخوں کا مزید اعلان مندرجہ ذیل مواصلاتی چینلز پر کیا جائے گا۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں