16. پیوست¶
16.1. حالت تعاملی¶
دو نوع از حالت تعاملی REPL وجود دارد. مفسر پایهی کلاسیک در تمامی پلتفرمها با حداقل امکانات برای ویرایش خط فرمان پشتیبانی میشود.
از پایتون ۳٫۱۳ به بعد، بهطور پیشفرض یک پوسته تعاملی جدید استفاده میشود. این پوسته از رنگ، ویرایش چندخطی، مرور تاریخچه، و حالت چسباندن «paste mode» پشتیبانی میکند. برای غیرفعال کردن رنگ، جزئیات را در کنترل رنگ ببینید. کلیدهای تابعی برخی از قابلیتهای اضافی را فراهم میکنند. F1 مرورگر تعاملی راهنما pydoc را فعال می کند. F2 اجازه میدهد تاریخچه خط فرمان را بدون خروجی و بدون اعلان های >>> و ... مرور کنید. F3 حالت "چسباندن" را فعال می کند که چسباندن بلوکهای بزرگتر کد را آسانتر میسازد. برای بازگشت به اعلان معمولی، F3 را فشار دهید.
وقتی از پوستهی تعاملی جدید استفاده میکنید، با تایپ exit یا quit از پوسته خارج شوید. اضافهکردن پرانتز پس از این دستورات ضروری نیست.
اگر پوستهی تعاملی جدید مطلوب نباشد، میتوان آن را از طریق متغیر محیطی PYTHON_BASIC_REPL غیرفعال کرد.
16.1.1. مدیریت خطاها¶
زمان بروز خطا، مفسر یک پیام خطا و «ردگیری پشته» «stack trace» چاپ میکند. در حالت تعاملی، بعد از نمایش خطا، برنامه به حالت آمادهباش برای دریافت دستورات جدید بازمیگردد؛ اما اگر ورودی از یک پرونده آمده باشد، پس از چاپ ردگیری پشته با یک کد خروجی غیر صفر از برنامه خارج میشود. (استثناهایی که با بخش except در یک دستور try مدیریت میشوند، در این زمینه خطا محسوب نمیشوند.) بعضی خطاها بهطور قطعی باعث خروج از برنامه میشوند و کد خروجی غیر صفر دارند؛ این در مورد ناسازگاریهای داخلی یا در برخی موارد کمبود حافظه صدق میکند. تمام پیامهای خطا در جریان خروجی خطا «standard error» نوشته میشوند؛ خروجی معمول دستورات اجراشده نیز در جریان خروجی استاندارد «standard output» نوشته میشود.
فشردن کلید وقفه (که معمولاً Control-C یا Delete است) در اعلان اصلی یا فرعی، ورودی را لغو کرده و کاربر را به اعلان اصلی بازمیگرداند. [1] فشردن کلید وقفه در حین اجرای یک دستور، استثنای KeyboardInterrupt را ایجاد میکند که میتوان آن را با دستور try مدیریت کرد.
16.1.2. اسکریپتهای اجرایی پایتون¶
در سیستمعاملهای یونیکس مبتنی بر BSD، اسکریپتهای پایتون میتوانند مانند اسکریپتهای پوسته به صورت مستقیم اجرایی شوند، با قرار دادن خط
#!/usr/bin/env python3
(با فرض اینکه مفسر در PATH کاربر قرار دارد) در ابتدای اسکریپت باید قرار گیرد و پرونده باید به حالت قابل اجرا تنظیم شود. #! باید نخستین دو نویسهی پرونده باشند. در برخی پلتفرمها، این خط اول باید با پایان خط به سبک یونیکس ('\n') تمام شود، نه پایان خط ویندوزی ('\r\n'). توجه داشته باشید که نویسهی '#' برای آغاز یک کامنت در پایتون به کار میرود.
با استفاده از دستور chmod میتوان به اسکریپت حالت اجرایی یا مجوز اجرا داد.
$ chmod +x myscript.py
در سیستمعامل ویندوز، مفهوم «حالت اجرایی» "executable mode" وجود ندارد. نصبکنندهی پایتون بهطور خودکار پروندههای .py را به python.exe مرتبط میکند تا با دوبار کلیک روی پرونده پایتون، بهعنوان اسکریپت اجرا شود. پسوند پرونده همچنین میتواند .pyw باشد که در این صورت پنجره کنسولی که معمولاً ظاهر میشود، نمایش داده نمیشود.
16.1.3. پروندهی آغازین تعاملی «The Interactive Startup File»¶
هنگامی که به صورت تعاملی از پایتون استفاده میکنید، اجرای برخی دستورات استاندارد در هر بار شروع مفسر میتواند مفید باشد. شما میتوانید این کار را با تنظیم متغیر محیطی با نام PYTHONSTARTUP به نام پروندهای که حاوی دستورات شروع شما است انجام دهید. این قابلیت شبیه به ویژگی .profile در پوستههای یونیکس است.
این پرونده فقط در نشستهای تعاملی خوانده میشود، نه زمانی که پایتون دستورات را از یک اسکریپت میخواند، و نه زمانی که /dev/tty بهعنوان منبع صریح دستورات داده میشود (که در غیر این صورت همچون یک نشستی تعاملی رفتار میکند). این پرونده در همان فضای نامی که در آن دستورات تعاملی اجرا میشوند، اجرا میگردد بنابراین اشیایی که تعریف یا وارد میکند میتوانند بدون مشخص شدن در نشست تعاملی مورد استفاده قرار گیرند. شما میتوانید درخواستها sys.ps1 و sys.ps2 را نیز در این پرونده تغییر دهید.
اگر میخواهید یک پروندهی راهاندازی اضافی را از پوشهی فعلی بخوانید، میتوانید این کار را در پروندهی راهاندازی سراسری با استفاده از کدی مانند if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read()) برنامهریزی کنید. اگر میخواهید از پروندهی راهاندازی در یک اسکریپت استفاده کنید، باید این کار را بهصورت صریح در اسکریپت انجام دهید:
import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
with open(filename) as fobj:
startup_file = fobj.read()
exec(startup_file)
16.1.4. ماژولهای سفارشیسازی¶
پایتون دو قلاب برای سفارشی سازی ارائه میدهد: sitecustomize و usercustomize. برای دیدن چگونگی کارکرد آن، ابتدا باید مکان پوشه user site-packages خود را پیدا کنید. پایتون را اجرا کرده و این کد را اجرا کنید:
>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python3.x/site-packages'
حالا میتوانید پروندهای به نام usercustomize.py در آن پوشه ایجاد کرده و هر چیزی که میخواهید در آن قرار دهید. این پرونده روی هر بار اجرای پایتون تأثیر خواهد گذاشت، مگر اینکه پایتون با گزینه -s اجرا شود تا ایمپورت کردن خودکار غیرفعال گردد.
sitecustomize به همان صورت کار میکند، اما بهطور معمول توسط مدیر سیستم در پوشه global site-packages ایجاد میشود و قبل از usercustomize ایمپورت میشود. برای جزئیات بیشتر به مستندات ماژول site مراجعه کنید.
پانویسها