ابزارهای سیستمعامل¶
-
PyObject *PyOS_FSPath(PyObject *path)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار از نسخهی 3.6.
نمایش سامانه فایلبندی برای path را برمیگرداند. اگر شیء از نوع
strیاbytesباشد، یک ارجاع قوی جدید برگردانده میشود. اگر شیء رابطos.PathLikeرا پیادهسازی کند،__fspath__()به شرط آنکه یک شیءstrیاbytesباشد، برگردانده میشود. در غیر این صورت، استثنایTypeErrorبرداشته میشود وNULLبرگردانده میشود.اضافه شده در نسخهی 3.6.
-
int Py_FdIsInteractive(FILE *fp, const char *filename)¶
اگر پروندهی ورودی/خروجی استاندارد fp با نام filename تعاملی در نظر گرفته شود، مقدار true (غیرصفر) برمیگرداند. این حالت برای پروندههایی که
isatty(fileno(fp))در آنها true است، برقرار است. اگرPyConfig.interactiveغیرصفر باشد، این تابع همچنین در صورتی که اشارهگر filename برابرNULLباشد یا نام برابر با یکی از رشتههای'<stdin>'یا'???'باشد، مقدار true برمیگرداند.این تابع نباید پیش از مقداردهی اولیه پایتون فراخوانی شود.
-
void PyOS_BeforeFork()¶
- قسمتی از ABI پایدار on platforms with fork() از نسخهی 3.7.
تابعی برای آمادهسازی برخی وضعیتهای داخلی پیش از انشعاب فرایند. این تابع باید پیش از فراخوانی
fork()یا هر تابع مشابهای که از فرایند فعلی رونوشت میگیرد، فراخوانی شود. تنها در سیستمهایی کهfork()در آنها تعریف شده است در دسترس است.هشدار
فراخوانی
fork()در C باید فقط از نخِ «اصلی» (از مفسرِ «اصلی») انجام شود. همین موضوع برایPyOS_BeforeFork()نیز صادق است.اضافه شده در نسخهی 3.7.
-
void PyOS_AfterFork_Parent()¶
- قسمتی از ABI پایدار on platforms with fork() از نسخهی 3.7.
تابعی برای بهروزرسانی برخی از وضعیتهای داخلی پس از انشعاب فرایند. این تابع باید از فرایند والد، پس از فراخوانی
fork()یا هر تابع مشابهای که از فرایند فعلی رونوشت میگیرد، فراخوانی شود؛ صرفنظر از اینکه رونوشتگیری فرایند موفق بوده است یا خیر. تنها روی سیستمهایی کهfork()در آنها تعریف شده است در دسترس است.هشدار
فراخوانی
fork()در C باید تنها از نخ «اصلی» (از مفسر «اصلی») انجام شود. همین امر برایPyOS_AfterFork_Parent()نیز صادق است.اضافه شده در نسخهی 3.7.
-
void PyOS_AfterFork_Child()¶
- قسمتی از ABI پایدار on platforms with fork() از نسخهی 3.7.
تابعی برای بهروزرسانی وضعیت داخلی مفسر پس از انشعاب یک فرایند. این تابع باید از فرایند فرزند پس از فراخوانی
fork()یا هر تابع مشابهای که فرایند فعلی را رونوشت میکند، فراخوانی شود، اگر احتمالی وجود داشته باشد که فرایند دوباره مفسر پایتون را فراخوانی کند. این تابع فقط در سیستمهایی کهfork()در آنها تعریف شده است دسترسپذیر است.هشدار
فراخوانی
fork()در C باید فقط از نخ «اصلی» (از مفسر «اصلی») انجام شود. همین امر برایPyOS_AfterFork_Child()نیز صادق است.اضافه شده در نسخهی 3.7.
همچنین ملاحظه نمائید
os.register_at_fork()اجازه میدهد توابع سفارشی پایتون را ثبت کنید تا توسطPyOS_BeforeFork()،PyOS_AfterFork_Parent()وPyOS_AfterFork_Child()فراخوانی شوند.
-
void PyOS_AfterFork()¶
- قسمتی از ABI پایدار on platforms with fork().
تابعی برای بهروزرسانی برخی از وضعیتهای داخلی پس از انشعاب فرایند؛ اگر قرار باشد مفسر پایتون همچنان استفاده شود، این تابع باید در فرایند جدید فراخوانی شود. اگر یک پرونده اجرایی جدید در فرایند جدید بارگذاری شود، نیازی به فراخوانی این تابع نیست.
منسوخ شده از نسخهی 3.7: این تابع توسط
PyOS_AfterFork_Child()جایگزین شده است.
-
int PyOS_CheckStack()¶
- قسمتی از ABI پایدار on platforms with USE_STACKCHECK از نسخهی 3.7.
وقتی فضای پشتهی مفسر تمام شود، مقدار true را برمیگرداند. این یک بررسی قابل اعتماد است، اما تنها زمانی در دسترس است که
USE_STACKCHECKتعریف شده باشد (در حال حاضر در نسخههایی از ویندوز که از کامپایلر Microsoft Visual C++ استفاده میکنند).USE_STACKCHECKبهصورت خودکار تعریف میشود؛ شما هرگز نباید این تعریف را در کد خودتان تغییر دهید.
-
typedef void (*PyOS_sighandler_t)(int)¶
- قسمتی از ABI پایدار.
-
PyOS_sighandler_t PyOS_getsig(int i)¶
- قسمتی از ABI پایدار.
هندلر فعلی سیگنال i را برمیگرداند. این تابع پوششی نازک حول
sigaction()یاsignal()است. این توابع را مستقیماً فراخوانی نکنید!
-
PyOS_sighandler_t PyOS_setsig(int i, PyOS_sighandler_t h)¶
- قسمتی از ABI پایدار.
هندلر سیگنال مربوط به سیگنال i را به h تنظیم میکند؛ هندلر سیگنال قدیمی را برمیگرداند. این تابع یک پوشش نازک حول
sigaction()یاsignal()است. آن توابع را مستقیماً فراخوانی نکنید!
-
int PyOS_InterruptOccurred(void)¶
- قسمتی از ABI پایدار.
بررسی میکند که آیا سیگنال
SIGINTدریافت شده است یا خیر.اگر سیگنال
SIGINTرخ داده باشد،1را برمیگرداند و پرچم سیگنال را پاک میکند؛ در غیر این صورت0.در بیشتر موارد، بهتر است بهجای این تابع از
PyErr_CheckSignals()استفاده کنید.PyErr_CheckSignals()هندلرهای مناسب سیگنال را برای همهی سیگنالهای در انتظار فراخوانی میکند و به کد پایتون اجازه میدهد سیگنال را بهدرستی مدیریت کند. این تابع فقطSIGINTرا تشخیص میدهد و هیچیک از هندلرهای سیگنال پایتون را فراخوانی نمیکند.این تابع نسبت به سیگنالهای ناهمگام ایمن (async-signal-safe) است و نمیتواند شکست بخورد. فراخوانکننده باید یک attached thread state را در اختیار داشته باشد.
-
wchar_t *Py_DecodeLocale(const char *arg, size_t *size)¶
- قسمتی از ABI پایدار از نسخهی 3.7.
هشدار
این تابع نباید مستقیماً فراخوانی شود: از API
PyConfigبه همراه تابعPyConfig_SetBytesString()استفاده کنید که تضمین میکند پایتون از پیش مقداردهی اولیه شده است.این تابع نباید پیش از پیشمقداردهی اولیه پایتون و پیش از پیکربندی درست locale مربوط به LC_CTYPE فراخوانی شود: تابع
Py_PreInitialize()را ببینید.یک رشته بایتی را از کدگذاری و هندلر خطای سامانه فایلبندی کدگشایی میکند. اگر هندلر خطا هندلر خطای surrogateescape باشد، بایتهای کدگشاییناپذیر بهعنوان نویسههایی در بازه U+DC80..U+DCFF کدگشایی میشوند؛ و اگر بتوان دنبالهای از بایتها را بهعنوان یک نویسه جانشین کدگشایی کرد، بایتها بهجای کدگشاییشدن، با استفاده از هندلر خطای surrogateescape خنثی میشوند.
یک اشارهگر به رشته نویسه پهنِ تازه تخصیصیافته برمیگرداند؛ برای آزاد کردن حافظه از
PyMem_RawFree()استفاده کنید. اگر size برابرNULLنباشد، تعداد نویسههای پهن را بدون احتساب نویسه تهی در*sizeمینویسد.در صورت خطای کدگشایی یا خطای تخصیص حافظه،
NULLرا برمیگرداند. اگر size برابرNULLنباشد،*sizeدر خطای حافظه به(size_t)-1و در خطای کدگشایی به(size_t)-2تنظیم میشود.filesystem encoding and error handler توسط
PyConfig_Read()انتخاب میشوند: به اعضایfilesystem_encodingوfilesystem_errorsازPyConfigمراجعه کنید.خطاهای کدگشایی هرگز نباید رخ دهند، مگر اینکه اشکالی در کتابخانه C وجود داشته باشد.
برای کدگذاری رشتهی نویسهها و بازگرداندن آن به یک رشته بایتی، از تابع
Py_EncodeLocale()استفاده کنید.همچنین ملاحظه نمائید
توابع
PyUnicode_DecodeFSDefaultAndSize()وPyUnicode_DecodeLocaleAndSize().اضافه شده در نسخهی 3.5.
تغییر یافته در نسخهی 3.7: این تابع اکنون در حالت UTF-8 پایتون از کدگذاری UTF-8 استفاده میکند.
تغییر یافته در نسخهی 3.8: اگر
PyPreConfig.legacy_windows_fs_encodingصفر باشد، این تابع اکنون در ویندوز از کدگذاری UTF-8 استفاده میکند؛
-
char *Py_EncodeLocale(const wchar_t *text, size_t *error_pos)¶
- قسمتی از ABI پایدار از نسخهی 3.7.
یک رشتهی نویسه پهن را با کدگذاری سامانه فایلبندی و هندلر خطا کدگذاری میکند. اگر هندلر خطا هندلر خطای surrogateescape باشد، نویسههای جانشین در بازهی U+DC80..U+DCFF به بایتهای 0x80..0xFF تبدیل میشوند.
یک اشارهگر به رشته بایتی تازه تخصیصیافته را برمیگرداند؛ برای آزاد کردن حافظه از
PyMem_Free()استفاده کنید. در صورت خطای کدگذاری یا خطای تخصیص حافظه،NULLبرمیگرداند.اگر error_pos برابر
NULLنباشد،*error_posدر صورت موفقیت به(size_t)-1و در صورت وقوع خطای کدگذاری به اندیس نویسه نامعتبر تنظیم میشود.filesystem encoding and error handler توسط
PyConfig_Read()انتخاب میشوند: به اعضایfilesystem_encodingوfilesystem_errorsازPyConfigمراجعه کنید.از تابع
Py_DecodeLocale()برای کدگشایی رشته بایتی و بازگرداندن آن به یک رشته نویسه پهن استفاده کنید.هشدار
این تابع نباید پیش از پیشمقداردهی اولیه پایتون و پیش از پیکربندی درست locale مربوط به LC_CTYPE فراخوانی شود: تابع
Py_PreInitialize()را ببینید.همچنین ملاحظه نمائید
توابع
PyUnicode_EncodeFSDefault()وPyUnicode_EncodeLocale().اضافه شده در نسخهی 3.5.
تغییر یافته در نسخهی 3.7: این تابع اکنون در حالت UTF-8 پایتون از کدگذاری UTF-8 استفاده میکند.
تغییر یافته در نسخهی 3.8: اگر
PyPreConfig.legacy_windows_fs_encodingصفر باشد، این تابع اکنون در ویندوز از کدگذاری UTF-8 استفاده میکند.
-
FILE *Py_fopen(PyObject *path, const char *mode)¶
مشابه
fopen()است، اما path یک شیء پایتون است و در صورت خطا یک استثنا تنظیم میشود.path باید یک شیء
str، یک شیءbytesیا یک شیء شبهمسیر باشد.در صورت موفقیت، اشارهگر جدید پرونده را برمیگرداند. در صورت خطا، یک استثنا تنظیم کرده و
NULLرا برمیگرداند.پرونده باید توسط
Py_fclose()بسته شود، نه با فراخوانی مستقیمfclose().توصیفگر پرونده بهصورت غیرقابل ارثبری ایجاد میشود (PEP 446).
فراخواننده باید attached thread state داشته باشد.
اضافه شده در نسخهی 3.14.
-
int Py_fclose(FILE *file)¶
بستن پروندهای که با
Py_fopen()باز شده است.در صورت موفقیت،
0را برمیگرداند. در صورت خطا،EOFرا برمیگرداند وerrnoبرای نشان دادن خطا تنظیم میشود. در هر دو حالت، هر دسترسی بعدی (از جمله فراخوانی مجددPy_fclose()) به جریان، منجر به رفتار تعریفنشده میشود.اضافه شده در نسخهی 3.14.
توابع سیستمی¶
اینها توابع کاربردی هستند که کارکردهای ماژول sys را برای کد C در دسترس قرار میدهند. همهی آنها با دیکشنری ماژول sys مربوط به نخ فعلی مفسر کار میکنند که در ساختار وضعیت داخلی نخ قرار دارد.
-
PyObject *PySys_GetObject(const char *name)¶
- مقدار بازگشتی: مرجع امانتی. قسمتی از ABI پایدار.
شیء name را از ماژول
sysبازمیگرداند، یا اگر وجود نداشته باشدNULLرا برمیگرداند، بدون تنظیم استثنا.
-
int PySys_SetObject(const char *name, PyObject *v)¶
- قسمتی از ABI پایدار.
name را در ماژول
sysبرابر v قرار میدهد، مگر اینکه vNULLباشد که در این صورت name از ماژول sys حذف میشود. در صورت موفقیت0و در صورت خطا-1برمیگرداند.
-
void PySys_ResetWarnOptions()¶
- قسمتی از ABI پایدار.
بازنشانی
sys.warnoptionsبه یک فهرست خالی. این تابع میتواند پیش ازPy_Initialize()فراخوانی شود.منسوخ شده از نسخهی 3.13, در نسخهی 3.15 حذف خواهد شد: به جای آن،
sys.warnoptionsوwarnings.filtersرا پاک کنید.
-
void PySys_WriteStdout(const char *format, ...)¶
- قسمتی از ABI پایدار.
رشته خروجی توصیفشده توسط format را در
sys.stdoutمینویسد. هیچ استثنایی بهوجود نمیآید، حتی اگر اسلایس رخ دهد (در ادامه ببینید).format باید اندازهی کل رشتهی خروجی قالببندیشده را به ۱۰۰۰ بایت یا کمتر محدود کند -- پس از ۱۰۰۰ بایت، رشتهی خروجی بریده میشود. بهطور خاص، این بدان معناست که نباید هیچ قالب "%s" بدون محدودیت وجود داشته باشد؛ این قالبها باید با استفاده از "%.<N>s" محدود شوند که در آن <N> عددی دهدهی است که بهگونهای محاسبه میشود که <N> بهعلاوهی حداکثر اندازهی سایر متنهای قالببندیشده از ۱۰۰۰ بایت بیشتر نشود. همچنین مراقب "%f" باشید که میتواند برای اعداد بسیار بزرگ صدها رقم چاپ کند.
اگر مشکلی رخ دهد یا
sys.stdoutتنظیم نشده باشد، پیام قالببندیشده به stdout واقعی (در سطح C) نوشته میشود.
-
void PySys_WriteStderr(const char *format, ...)¶
- قسمتی از ABI پایدار.
مانند
PySys_WriteStdout()است، اما به جای آن بهsys.stderrیا stderr مینویسد.
-
void PySys_FormatStdout(const char *format, ...)¶
- قسمتی از ABI پایدار.
تابعی مشابه PySys_WriteStdout() است، اما پیام را با استفاده از
PyUnicode_FromFormatV()قالببندی میکند و پیام را به طولی دلخواه کوتاه نمیکند.اضافه شده در نسخهی 3.2.
-
void PySys_FormatStderr(const char *format, ...)¶
- قسمتی از ABI پایدار.
مانند
PySys_FormatStdout()، اما بهجای آن بهsys.stderrیا stderr مینویسد.اضافه شده در نسخهی 3.2.
-
PyObject *PySys_GetXOptions()¶
- مقدار بازگشتی: مرجع امانتی. قسمتی از ABI پایدار از نسخهی 3.7.
دیکشنری فعلی گزینههای
-Xرا برمیگرداند، مشابهsys._xoptions. در صورت خطا،NULLبرگردانده میشود و یک استثنا تنظیم میشود.اضافه شده در نسخهی 3.2.
-
int PySys_Audit(const char *event, const char *format, ...)¶
- قسمتی از ABI پایدار از نسخهی 3.13.
یک رویداد حسابرسی را همراه با هر قلاب فعال برپ میکند. در صورت موفقیت صفر و در صورت شکست مقدار غیرصفر به همراه استثنای تنظیمشده برمیگرداند.
آرگومان رشتهای event نباید NULL باشد.
اگر قلابی افزوده شده باشد، از format و سایر آرگومانها برای ساخت تاپلی که پاس داده شود استفاده خواهد شد. به جز
N، همان نویسههای قالب که درPy_BuildValue()استفاده میشوند، در دسترس هستند. اگر مقدار ساختهشده یک تاپل نباشد، به یک تاپل تکعنصری افزوده خواهد شد.از گزینهی قالب
Nنباید استفاده شود. این گزینه یک ارجاع را مصرف میکند، اما از آنجا که هیچ راهی برای دانستن اینکه آیا آرگومانهای این تابع مصرف خواهند شد یا خیر وجود ندارد، استفاده از آن ممکن است باعث نشت ارجاع شود.توجه داشته باشید که نویسههای قالب
#همیشه باید بهعنوانPy_ssize_tدر نظر گرفته شوند، صرفنظر از اینکهPY_SSIZE_T_CLEANتعریفشده باشد یا خیر.sys.audit()همین کار را از درون کد پایتون انجام میدهد.همچنین
PySys_AuditTuple()را ببینید.اضافه شده در نسخهی 3.8.
تغییر یافته در نسخهی 3.8.2: نویسههای قالب
#بهPy_ssize_tنیاز دارند. پیشتر، یک هشدار منسوخشدگی اجتنابناپذیر اکسپورت میشد.
-
int PySys_AuditTuple(const char *event, PyObject *args)¶
- قسمتی از ABI پایدار از نسخهی 3.13.
مشابه
PySys_Audit()است، اما آرگومانها را بهصورت یک شیء پایتون میگذرد. args باید یکtupleباشد. برای عدم گذراندن آرگومان، args میتواند NULL باشد.اضافه شده در نسخهی 3.13.
-
int PySys_AddAuditHook(Py_AuditHookFunction hook, void *userData)¶
فراخوانیپذیر hook را به فهرست قلابهای حسابرسی فعال الحاق میکند. در صورت موفقیت صفر و در صورت شکست مقدار غیرصفر برمیگرداند. اگر رانتایم مقداردهی اولیه شده باشد، در صورت شکست خطایی نیز تنظیم میکند. قلابهایی که از طریق این API افزوده میشوند، برای تمام مفسرهای ایجادشده توسط رانتایم فراخوانی میشوند.
اشارهگر userData به تابع قلاب پاس داده میشود. از آنجا که توابع قلاب ممکن است از رانتایمهای مختلف فراخوانی شوند، این اشارهگر نباید مستقیماً به وضعیت پایتون اشاره کند.
فراخوانی این تابع پیش از
Py_Initialize()ایمن است. هنگامی که پس از مقداردهی اولیه رانتایم فراخوانی شود، قلابهای حسابرسی موجود مطلع میشوند و ممکن است عملیات را با ایجاد خطایی که زیرکلاسی ازExceptionاست، بهصورت بیصدا لغو کنند (خطاهای دیگر سرکوب نخواهند شد).تابع قلاب همیشه با یک وضعیت نخ پیوستشده توسط مفسر پایتونی که رویداد را ایجاد کرده است، فراخوانی میشود.
برای شرح مفصل حسابرسی به PEP 578 مراجعه کنید. توابعی در رانتایم و کتابخانه استاندارد که رویداد ایجاد میکنند در جدول رویدادهای حسابرسی فهرست شدهاند. جزئیات در مستندات هر تابع آمده است.
اگر مفسر راهاندازیشده باشد، این تابع رویداد حسابرسی
sys.addaudithookرا بدون هیچ آرگومانی ایجاد میکند. اگر هر یک از قلابهای موجود استثنایی مشتقشده ازExceptionایجاد کند، قلاب جدید اضافه نخواهد شد و استثنا پاک میشود. در نتیجه، فراخوانندگان نمیتوانند فرض کنند که قلابشان اضافه شده است، مگر آنکه کنترل تمام قلابهای موجود را در دست داشته باشند.-
typedef int (*Py_AuditHookFunction)(const char *event, PyObject *args, void *userData)¶
نوع تابع قلاب. event آرگومان رویداد از نوع رشتهی C است که به
PySys_Audit()یاPySys_AuditTuple()ارسال میشود. تضمین میشود که args یکPyTupleObjectباشد. userData آرگومانی است که به PySys_AddAuditHook() ارسال میشود.
اضافه شده در نسخهی 3.8.
-
typedef int (*Py_AuditHookFunction)(const char *event, PyObject *args, void *userData)¶
کنترل فرایند¶
-
void Py_FatalError(const char *message)¶
- قسمتی از ABI پایدار.
یک پیام خطای مهلک چاپ میکند و فرایند را میکشد. هیچ پاکسازی انجام نمیشود. این تابع تنها زمانی باید فراخوانی شود که شرایطی تشخیص داده شود که ادامه استفاده از مفسر پایتون را خطرناک سازد؛ برای مثال، زمانی که به نظر میرسد مدیریت شیء دچار خرابی شده باشد. در یونیکس، تابع
abort()از کتابخانه استاندارد C فراخوانی میشود که سعی خواهد کرد یک پروندهcoreتولید کند.تابع
Py_FatalError()با ماکرویی جایگزین میشود که نام تابع فعلی را بهطور خودکار ثبت میکند، مگر آنکه ماکرویPy_LIMITED_APIتعریف شده باشد.تغییر یافته در نسخهی 3.9: نام تابع را بهطور خودکار ثبت میکند.
-
void Py_Exit(int status)¶
- قسمتی از ABI پایدار.
از فرایند فعلی خارج میشود. این تابع
Py_FinalizeEx()را فراخوانی میکند و سپس تابعexit(status)کتابخانهی استاندارد C را فراخوانی میکند. اگرPy_FinalizeEx()خطا را نشان دهد، وضعیت خروج به ۱۲۰ تنظیم میشود.تغییر یافته در نسخهی 3.6: خطاهای ناشی از نهاییسازی دیگر نادیده گرفته نمیشوند.
-
int Py_AtExit(void (*func)())¶
- قسمتی از ABI پایدار.
یک تابع پاکسازی ثبت کنید تا توسط
Py_FinalizeEx()فراخوانی شود. تابع پاکسازی بدون هیچ آرگومانی فراخوانی میشود و نباید مقداری برگرداند. حداکثر ۳۲ تابع پاکسازی را میتوان ثبت کرد. وقتی ثبت با موفقیت انجام شود،Py_AtExit()مقدار0را برمیگرداند؛ در صورت شکست، مقدار-1را برمیگرداند. آخرین تابع پاکسازی ثبتشده، نخست فراخوانی میشود. هر تابع پاکسازی حداکثر یکبار فراخوانی خواهد شد. از آنجا که نهاییسازی داخلی پایتون پیش از تابع پاکسازی کامل شده خواهد بود، func نباید هیچیک از APIهای پایتون را فراخوانی کند.همچنین ملاحظه نمائید
PyUnstable_AtExit()برای گذراندن آرگومانvoid *data.