os --- رابطهای متفرقه سیستمعامل¶
کد منبع: Lib/os.py
این ماژول یک روش قابلحمل برای استفاده از قابلیتهای وابسته به سیستمعامل فراهم میکند. اگر فقط میخواهید یک پرونده را بخوانید یا بنویسید، open() را ببینید، اگر میخواهید مسیرها را دستکاری کنید، ماژول os.path را ببینید، و اگر میخواهید تمام سطرهای همه پروندههای خط فرمان را بخوانید، ماژول fileinput را ببینید. برای ایجاد پروندهها و پوشههای موقت ماژول tempfile را ببینید، و برای مدیریت پروندهها و پوشهها در سطح بالا ماژول shutil را ببینید.
نکاتی دربارهی دسترسپذیری این توابع:
طراحی همه ماژولهای توکار وابسته به سیستمعامل پایتون بهگونهای است که تا زمانی که عملکرد یکسانی در دسترس باشد، از رابط یکسانی استفاده میکنند؛ برای مثال، تابع
os.stat(path)اطلاعات stat درباره path را در قالب یکسانی برمیگرداند (که اتفاقاً از رابط POSIX سرچشمه گرفته است).افزونههای مختص یک سیستمعامل خاص نیز از طریق ماژول
osدر دسترس هستند، اما استفاده از آنها البته تهدیدی برای قابلیت حمل محسوب میشود.همهی توابعی که مسیر یا نام پرونده را میپذیرند، هم اشیاء bytes و هم اشیاء رشته را میپذیرند و اگر مسیر یا نام پروندهای برگردانده شود، نتیجه شیءای از همان نوع خواهد بود.
در VxWorks، از os.popen، os.fork، os.execv و os.spawn*p* پشتیبانی نمیشود.
در سکوهای WebAssembly، اندروید و iOS، بخشهای بزرگی از ماژول
osدر دسترس نیستند یا رفتار متفاوتی دارند. APIهای مربوط به فرایندها (برای مثالfork()،execve()) و منابع (برای مثالnice()) در دسترس نیستند. موارد دیگر مانندgetuid()وgetpid()یا شبیهسازی میشوند یا استاب هستند. سکوهای WebAssembly همچنین پشتیبانی از سیگنالها (برای مثالkill()،wait()) را ندارند.
توجه
تمام توابع این ماژول در صورتی که نامها و مسیرهای پرونده نامعتبر یا غیرقابلدسترس باشند، یا در صورتی که سایر آرگومانها با وجود نوع صحیح، توسط سیستمعامل پذیرفته نشوند، OSError (یا زیرکلاسهای آن) را پرتاب میکنند.
- os.name¶
نام ماژول ایمپورتشده وابسته به سیستمعامل. نامهای زیر در حال حاضر ثبت شدهاند:
'posix'،'nt'،'java'.همچنین ملاحظه نمائید
sys.platformدانهبندی ریزتری دارد.os.uname()اطلاعات نسخهی وابسته به سیستم را ارائه میدهد.ماژول
platformبررسیهای دقیقی برای هویت سیستم ارائه میدهد.
نام پروندهها، آرگومانهای خط فرمان و متغیرهای محیطی¶
در پایتون، نام پروندهها، آرگومانهای خط فرمان و متغیرهای محیطی با استفاده از نوع رشته نمایش داده میشوند. در برخی سیستمها، کدگشایی این رشتهها به بایتها و از بایتها پیش از انتقال آنها به سیستمعامل ضروری است. پایتون برای انجام این تبدیل از filesystem encoding and error handler استفاده میکند (به sys.getfilesystemencoding() مراجعه کنید).
کدگذاری و مدیریت خطای سامانه فایلبندی در هنگام راهاندازی پایتون توسط تابع PyConfig_Read() پیکربندی میشوند: اعضای filesystem_encoding و filesystem_errors از PyConfig را ببینید.
تغییر یافته در نسخهی 3.1: در برخی سیستمها، تبدیل با استفاده از کدگذاری سامانه فایلبندی ممکن است شکست بخورد. در این صورت، پایتون از هندلر خطای کدگذاری surrogateescape استفاده میکند، به این معنا که بایتهای غیرقابل کدگشایی در کدگشایی با یک نویسه یونیکد U+DCxx جایگزین میشوند و این نویسهها دوباره در کدگذاری به بایت اصلی تبدیل میشوند.
کدگذاری سامانه فایلبندی باید تضمین کند که کدگشایی تمام بایتهای کمتر از ۱۲۸ با موفقیت انجام میشود. اگر کدگذاری سامانه فایلبندی نتواند این تضمین را فراهم کند، توابع API میتوانند UnicodeError را پرتاب کنند.
همچنین locale encoding را ببینید.
حالت UTF-8 پایتون¶
اضافه شده در نسخهی 3.7: برای جزئیات بیشتر به PEP 540 مراجعه کنید.
حالت UTF-8 پایتون، locale encoding را نادیده میگیرد و استفاده از کدگذاری UTF-8 را اجباری میکند:
از UTF-8 بهعنوان کدگذاری سامانه فایلبندی استفاده کنید.
sys.getfilesystemencoding()'utf-8'را برمیگرداند.locale.getpreferredencoding()'utf-8'را بازمیگرداند (آرگومان do_setlocale هیچ تأثیری ندارد).sys.stdin،sys.stdoutوsys.stderrهمگی برای کدگذاری متن خود از UTF-8 استفاده میکنند، با فعال بودنsurrogateescapeبهعنوان هندلر خطا برایsys.stdinوsys.stdout(sys.stderrهمچنان ازbackslashreplaceاستفاده میکند، همانطور که در حالت پیشفرض آگاه از locale نیز استفاده میکند)در یونیکس،
os.device_encoding()بهجای کدگذاری دستگاه،'utf-8'را برمیگرداند.
توجه داشته باشید که تنظیمات جریان استاندارد در حالت UTF-8 را میتوان با PYTHONIOENCODING بازنویسی کرد (درست همانطور که در حالت پیشفرض آگاه از locale نیز امکانپذیر است).
در نتیجه تغییرات در آن APIهای سطح پایینتر، سایر APIهای سطح بالاتر نیز رفتارهای پیشفرض متفاوتی نشان میدهند:
آرگومانهای خط فرمان، متغیرهای محیطی و نام پروندهها با استفاده از کدگذاری UTF-8 به متن کدگشایی میشوند.
os.fsdecode()وos.fsencode()از کدگذاری UTF-8 استفاده میکنند.open()،io.open()وcodecs.open()بهطور پیشفرض از کدگذاری UTF-8 استفاده میکنند. با این حال، آنها همچنان بهطور پیشفرض از هندلر خطای سختگیرانه (strict) استفاده میکنند، بهطوری که تلاش برای باز کردن یک پرونده دودویی در حالت متنی احتمالاً بهجای تولید دادههای بیمعنی، منجر به پرتاب استثنایی میشود.
اگر locale LC_CTYPE در زمان راهاندازی پایتون C یا POSIX باشد، حالت UTF-8 پایتون فعال میشود (به تابع PyConfig_Read() مراجعه کنید).
میتوان آن را با استفاده از گزینهی خط فرمان -X utf8 و متغیر محیطی PYTHONUTF8 فعال یا غیرفعال کرد.
اگر متغیر محیطی PYTHONUTF8 اصلاً تنظیم نشده باشد، مفسر بهطور پیشفرض از تنظیمات محیط locale فعلی استفاده میکند، مگر اینکه محیط locale فعلی بهعنوان یک محیط locale قدیمی مبتنی بر ASCII شناسایی شود (همانطور که برای PYTHONCOERCECLOCALE توضیح داده شده است) و اجبار محیط locale (locale coercion) غیرفعال باشد یا با شکست مواجه شود. در اینگونه محیطهای locale قدیمی، مفسر بهطور پیشفرض حالت UTF-8 را فعال میکند، مگر اینکه صریحاً دستور داده شود که این کار انجام نشود.
حالت UTF-8 پایتون فقط در زمان راهاندازی پایتون میتواند فعال شود. مقدار آن را میتوان از sys.flags.utf8_mode خواند.
همچنین حالت UTF-8 در ویندوز و filesystem encoding and error handler را ببینید.
همچنین ملاحظه نمائید
- PEP 686
پایتون 3.15 حالت UTF-8 پایتون را پیشفرض خواهد کرد.
پارامترهای فرایند¶
این توابع و آیتمهای داده، اطلاعات را فراهم میکنند و روی فرایند و کاربر جاری عمل میکنند.
- os.ctermid()¶
نام پرونده متناظر با پایانه کنترلکننده فرایند را برمیگرداند.
دسترسپذیری: Unix, not WASI.
- os.environ¶
یک شیء mapping که در آن کلیدها و مقادیر، رشتههایی هستند که محیط فرایند را نشان میدهند. برای مثال،
environ['HOME']مسیرنام پوشهی خانگی شما است (در برخی سکوها) و معادلgetenv("HOME")در C است.این نگاشت در اولین باری که ماژول
osایمپورت میشود، ثبت میشود؛ معمولاً در هنگام راهاندازی پایتون بهعنوان بخشی از پردازشsite.py. تغییرات اعمالشده در محیط پس از این زمان، درos.environمنعکس نمیشوند، مگر تغییراتی که با تغییر مستقیمos.environایجاد شده باشند.میتوان از این نگاشت برای تغییر محیط و همچنین پرسوجوی محیط استفاده کرد. هنگامی که نگاشت تغییر کند،
putenv()بهصورت خودکار فراخوانی میشود.در یونیکس، برای کلیدها و مقادیر از
sys.getfilesystemencoding()و هندلر خطای'surrogateescape'استفاده میشود. اگر بخواهید از کدگذاری متفاوتی استفاده کنید، ازenvironbاستفاده کنید.در ویندوز، کلیدها به حروف بزرگ تبدیل میشوند. این قاعده هنگام دریافت، تنظیم یا حذف یک آیتم نیز اعمال میشود. برای مثال،
environ['monty'] = 'python'کلید'MONTY'را به مقدار'python'نگاشت میکند.توجه
فراخوانی مستقیم
putenv()باعث تغییرos.environنمیشود، بنابراین بهتر استos.environرا تغییر دهید.توجه
در برخی از سکوها، از جمله FreeBSD و macOS، تنظیم
environممکن است موجب نشتی حافظه شود. برایputenv()به مستندات سیستم مراجعه کنید.شما میتوانید آیتمهای این نگاشت را حذف کنید تا متغیرهای محیطی از حالت تنظیم خارج شوند.
unsetenv()بهطور خودکار هنگامی که آیتمی ازos.environحذف شود، و هنگامی که یکی از متدهایpop()یاclear()فراخوانی شود، فراخوانی میشود.همچنین ملاحظه نمائید
تابع
os.reload_environ().تغییر یافته در نسخهی 3.9: بهروزرسانی شد تا از عملگرهای ادغام (
|) و بهروزرسانی (|=) در PEP 584 پشتیبانی کند.
- os.environb¶
نسخهی بایتی
environ: یک شیء mapping که در آن هم کلیدها و هم مقدارها، اشیایbytesنشاندهندهی محیط فرایند هستند.environوenvironbهمگام هستند (تغییر دادنenvironb،environرا بهروزرسانی میکند و بالعکس).environbتنها در صورتی در دسترس است کهsupports_bytes_environبرابرTrueباشد.اضافه شده در نسخهی 3.2.
تغییر یافته در نسخهی 3.9: بهروزرسانی شد تا از عملگرهای ادغام (
|) و بهروزرسانی (|=) در PEP 584 پشتیبانی کند.
- os.reload_environ()¶
نگاشتهای
os.environوos.environbنهانگاهی از متغیرهای محیطی در زمان شروع پایتون هستند. به همین دلیل، تغییرات محیط فرایند جاری، اگر خارج از پایتون یا توسطos.putenv()یاos.unsetenv()انجام شده باشند، منعکس نمیشوند. برای بهروزرسانیos.environوos.environbبا هرگونه تغییر از این دست در محیط فرایند جاری، ازos.reload_environ()استفاده کنید.هشدار
این تابع نخایمن نیست. فراخوانی آن در حالی که محیط در نخ دیگری در حال تغییر است، رفتاری تعریفنشده است. خواندن از
os.environیاos.environb، یا فراخوانیos.getenv()در حین بارگذاری مجدد، ممکن است نتیجهای خالی برگرداند.اضافه شده در نسخهی 3.14.
- os.chdir(path)
- os.fchdir(fd)
- os.getcwd()
این توابع در پروندهها و پوشهها توضیح داده شدهاند.
- os.fsencode(filename)¶
filename مسیرمانند (path-like) را به filesystem encoding and error handler کدگذاری میکند؛
bytesرا بدون تغییر بازمیگرداند.fsdecode()تابع معکوس است.اضافه شده در نسخهی 3.2.
تغییر یافته در نسخهی 3.6: پشتیبانی برای پذیرش اشیایی که رابط
os.PathLikeرا پیادهسازی میکنند، افزوده شد.
- os.fsdecode(filename)¶
کدگشایی path-like filename از filesystem encoding and error handler؛ بازگرداندن
strبدون تغییر.fsencode()تابع معکوس است.اضافه شده در نسخهی 3.2.
تغییر یافته در نسخهی 3.6: پشتیبانی برای پذیرش اشیایی که رابط
os.PathLikeرا پیادهسازی میکنند، افزوده شد.
- os.fspath(path)¶
بازنمایی مسیر در سامانه فایلبندی را برمیگرداند.
اگر
strیاbytesارسال شود، بدون تغییر بازگردانده میشود. در غیر این صورت__fspath__()فراخوانی میشود و مقدار آن بازگردانده میشود، مشروط بر اینکه یک شیءstrیاbytesباشد. در تمام حالتهای دیگر،TypeErrorپرتاب میشود.اضافه شده در نسخهی 3.6.
- class os.PathLike¶
یک کلاس پایه انتزاعی برای اشیایی که مسیر پرونده سیستم را نشان میدهند، مانند
pathlib.PurePath.اضافه شده در نسخهی 3.6.
- os.getenv(key, default=None)¶
مقدار متغیر محیطی key را در صورت وجود بهصورت یک رشته برمیگرداند، یا اگر وجود نداشته باشد، default را برمیگرداند. key یک رشته است. توجه داشته باشید که از آنجا که
getenv()ازos.environاستفاده میکند، نگاشتgetenv()نیز بهطور مشابه در زمان ایمپورت ثبت میشود و ممکن است این تابع تغییرات بعدی محیط را منعکس نکند.در یونیکس، کلیدها و مقدارها با استفاده از
sys.getfilesystemencoding()و هندلر خطای'surrogateescape'کدگشایی میشوند. اگر میخواهید از کدگذاری دیگری استفاده کنید، ازos.getenvb()استفاده کنید.دسترسپذیری: Unix, Windows.
- os.getenvb(key, default=None)¶
اگر متغیر محیطی key وجود داشته باشد، مقدار آن را بهصورت بایت برمیگرداند؛ در غیر این صورت default را برمیگرداند. key باید بایت باشد. توجه داشته باشید که از آنجا که
getenvb()ازos.environbاستفاده میکند، نگاشتgetenvb()نیز بهطور مشابه در زمان ایمپورت ثبت میشود و ممکن است این تابع تغییرات آینده محیط را منعکس نکند.getenvb()تنها در صورتی در دسترس است کهsupports_bytes_environبرابرTrueباشد.دسترسپذیری: Unix.
اضافه شده در نسخهی 3.2.
- os.get_exec_path(env=None)¶
فهرست پوشههایی را برمیگرداند که هنگام راهاندازی یک فرایند، مشابه پوسته، برای یافتن یک پرونده اجرایی با نام مشخص جستوجو میشوند. env، در صورت تعیین شدن، باید یک دیکشنری متغیرهای محیطی باشد تا PATH در آن جستوجو شود. بهطور پیشفرض، وقتی env برابر
Noneباشد، ازenvironاستفاده میشود.اضافه شده در نسخهی 3.2.
- os.getegid()¶
شناسه گروه مؤثر فرایند جاری را برمیگرداند. این با بیت «set id» روی پروندهای که در فرایند جاری اجرا میشود، متناظر است.
دسترسپذیری: Unix, not WASI.
- os.geteuid()¶
شناسه کاربر مؤثر فرایند جاری را برمیگرداند.
دسترسپذیری: Unix, not WASI.
- os.getgid()¶
شناسه گروه واقعی فرآیند جاری را برمیگرداند.
دسترسپذیری: Unix.
این تابع در WASI یک تابع stub است؛ برای اطلاعات بیشتر سکوهای WebAssembly را ببینید.
- os.getgrouplist(user, group, /)¶
فهرست شناسههای گروه را برمیگرداند که user به آنها تعلق دارد. اگر group در فهرست نباشد، به فهرست افزوده میشود؛ معمولاً group بهعنوان فیلد شناسهی گروه از رکورد گذرواژه برای user مشخص میشود، زیرا در غیر این صورت ممکن است آن شناسهی گروه حذف شود.
دسترسپذیری: Unix, not WASI.
اضافه شده در نسخهی 3.3.
- os.getgroups()¶
فهرستی از شناسههای گروه تکمیلی مرتبط با فرایند جاری را برمیگرداند.
دسترسپذیری: Unix, not WASI.
توجه
در macOS، رفتار
getgroups()تا حدی با سایر پلتفرمهای Unix متفاوت است. اگر مفسر Python با هدف استقرار (deployment target)10.5یا قدیمیتر ساخته شده باشد،getgroups()فهرست شناسههای گروه مؤثر مرتبط با فرایند کاربر جاری را برمیگرداند؛ این فهرست به تعداد ورودیهای تعریفشده توسط سیستم محدود است، که معمولاً ۱۶ است، و در صورت داشتن امتیازات کافی ممکن است توسط فراخوانیهایsetgroups()تغییر کند. اگر با هدف استقرار بزرگتر از10.5ساخته شده باشد،getgroups()فهرست دسترسی گروه جاری برای کاربر مرتبط با شناسه کاربر مؤثر فرایند را برمیگرداند؛ فهرست دسترسی گروه ممکن است در طول عمر فرایند تغییر کند، تحت تأثیر فراخوانیهایsetgroups()قرار نمیگیرد، و طول آن به ۱۶ محدود نیست. میتوان مقدار هدف استقرار،MACOSX_DEPLOYMENT_TARGET، را باsysconfig.get_config_var()به دست آورد.
- os.getlogin()¶
نام کاربر واردشده به پایانه کنترلکننده فرایند را برمیگرداند. در بیشتر موارد، استفاده از
getpass.getuser()مفیدتر است، زیرا این تابع متغیرهای محیطیLOGNAMEیاUSERNAMEرا بررسی میکند تا مشخص کند کاربر کیست، و بهعنوان جایگزین، برای دریافت نام ورود شناسه کاربر واقعی فعلی ازpwd.getpwuid(os.getuid())[0]استفاده میکند.دسترسپذیری: Unix, Windows, not WASI.
- os.getpgid(pid)¶
شناسه گروه فرایند برای فرایندی با شناسه فرایند pid را برمیگرداند. اگر pid برابر ۰ باشد، شناسه گروه فرایند برای فرایند جاری برگردانده میشود.
دسترسپذیری: Unix, not WASI.
- os.getpgrp()¶
شناسهی گروه فرایند جاری را برمیگرداند.
دسترسپذیری: Unix, not WASI.
- os.getpid()¶
شناسهی فرایند جاری را برمیگرداند.
این تابع در WASI یک تابع stub است؛ برای اطلاعات بیشتر سکوهای WebAssembly را ببینید.
- os.getppid()¶
شناسهی فرایند والد را برمیگرداند. هنگامی که فرایند والد خارج شده باشد، در یونیکس شناسهی بازگشتی، شناسهی فرایند init (۱) است؛ در ویندوز همچنان همان شناسه است، که ممکن است پیشتر توسط فرایند دیگری دوباره استفاده شده باشد.
دسترسپذیری: Unix, Windows, not WASI.
تغییر یافته در نسخهی 3.2: پشتیبانی از ویندوز اضافه شد.
- os.getpriority(which, who)¶
اولویت زمانبندی برنامه را دریافت میکند. مقدار which یکی از
PRIO_PROCESS،PRIO_PGRPیاPRIO_USERاست، و who نسبت به which تفسیر میشود (شناسه فرایند برایPRIO_PROCESS، شناسه گروه فرایند برایPRIO_PGRP، و شناسه کاربر برایPRIO_USER). مقدار صفر برای who (بهترتیب) بیانگر فرایند فراخوان، گروه فرایندِ فرایند فراخوان، یا شناسه کاربر واقعی فرایند فراخوان است.دسترسپذیری: Unix, not WASI.
اضافه شده در نسخهی 3.3.
- os.PRIO_PROCESS¶
- os.PRIO_PGRP¶
- os.PRIO_USER¶
پارامترهای توابع
getpriority()وsetpriority().دسترسپذیری: Unix, not WASI.
اضافه شده در نسخهی 3.3.
- os.PRIO_DARWIN_THREAD¶
- os.PRIO_DARWIN_PROCESS¶
- os.PRIO_DARWIN_BG¶
- os.PRIO_DARWIN_NONUI¶
پارامترهای توابع
getpriority()وsetpriority().دسترسپذیری: macOS
اضافه شده در نسخهی 3.12.
- os.getresuid()¶
یک تاپل (ruid, euid, suid) برمیگرداند که نشاندهندهی شناسههای کاربری واقعی، مؤثر و ذخیرهشدهی فرایند جاری است.
دسترسپذیری: Unix, not WASI, not macOS, not iOS.
اضافه شده در نسخهی 3.2.
- os.getresgid()¶
یک تاپل شامل (rgid, egid, sgid) برمیگرداند که شناسههای گروه واقعی، مؤثر و ذخیرهشدهی فرایند جاری را نشان میدهد.
دسترسپذیری: Unix, not WASI, not macOS, not iOS.
اضافه شده در نسخهی 3.2.
- os.getuid()¶
شناسه کاربری واقعی فرایند جاری را برمیگرداند.
دسترسپذیری: Unix.
این تابع در WASI یک تابع stub است؛ برای اطلاعات بیشتر سکوهای WebAssembly را ببینید.
- os.initgroups(username, gid, /)¶
برای مقداردهی اولیهی فهرست دسترسی گروه با همهی گروههایی که نام کاربری مشخصشده عضو آنها است، بهعلاوهی شناسهی گروه مشخصشده، فراخوانی سیستمی
initgroups()را انجام دهید.دسترسپذیری: Unix, not WASI, not Android.
اضافه شده در نسخهی 3.2.
- os.putenv(key, value, /)¶
متغیر محیطی به نام key را به رشتهی value تنظیم میکند. چنین تغییراتی در محیط بر زیرفرایندهایی که با
os.system()،popen()یاfork()وexecv()شروع شدهاند، تأثیر میگذارند.انتسابها به آیتمهای
os.environبهطور خودکار به فراخوانیهای متناظرputenv()تبدیل میشوند؛ با این حال، فراخوانیهایputenv()باعث بهروزرسانیos.environنمیشوند، بنابراین در واقع بهتر است به آیتمهایos.environانتساب دهید. این موضوع همچنین در موردgetenv()وgetenvb()صدق میکند، که بهترتیب در پیادهسازیهای خود ازos.environوos.environbاستفاده میکنند.همچنین تابع
os.reload_environ()را ببینید.توجه
در برخی از سکوها، از جمله FreeBSD و macOS، تنظیم
environممکن است باعث نشت حافظه شود. برایputenv()به مستندات سیستم مراجعه کنید.یک رویداد حسابرسی
os.putenvرا با آرگومانهایkeyوvalueپرتاب میکند.تغییر یافته در نسخهی 3.9: این تابع اکنون همیشه در دسترس است.
- os.setegid(egid, /)¶
شناسه گروه مؤثر فرایند جاری را تنظیم میکند.
دسترسپذیری: Unix, not WASI, not Android.
- os.seteuid(euid, /)¶
شناسه کاربر مؤثر فرایند جاری را تنظیم میکند.
دسترسپذیری: Unix, not WASI, not Android.
- os.setgid(gid, /)¶
شناسه گروه فرایند جاری را تنظیم میکند.
دسترسپذیری: Unix, not WASI, not Android.
- os.setgroups(groups, /)¶
فهرست شناسههای گروه تکمیلی مرتبط با فرایند جاری را روی groups تنظیم کنید. groups باید یک دنباله باشد، و هر عنصر باید یک عدد صحیح باشد که یک گروه را مشخص میکند. این عملیات معمولاً فقط برای ابرکاربر در دسترس است.
دسترسپذیری: Unix, not WASI.
توجه
در macOS، طول groups نباید از حداکثر تعداد تعریفشده توسط سیستم برای شناسههای گروه مؤثر بیشتر شود، که معمولاً ۱۶ است. مستندات
getgroups()را برای مواردی ببینید که ممکن است همان فهرست گروهی را که با فراخوانی setgroups() تنظیم شده است برنگرداند.
- os.setns(fd, nstype=0)¶
نخ جاری را دوباره با یک فضای نام لینوکس مرتبط میکند. برای جزئیات بیشتر، صفحههای راهنمای setns(2) و namespaces(7) را ببینید.
اگر fd به یک پیوند
/proc/pid/ns/اشاره کند،setns()نخ فراخوان را دوباره به فضای نام مرتبط با آن پیوند متصل میکند، و میتوان nstype را روی یکی از ثابتهای CLONE_NEW* تنظیم کرد تا محدودیتهایی بر عملیات اعمال شود (0به معنای بدون محدودیت است).از لینوکس 5.8 به بعد، fd ممکن است به یک توصیفگر پرونده PID اشاره داشته باشد که از
pidfd_open()بهدستآمده است. در این حالت،setns()نخ فراخواننده را دوباره به یک یا چند مورد از همان فضای نام های نخ مورد اشاره توسط fd مرتبط میکند. این کار مشمول هرگونه محدودیتی است که توسط nstype اعمال میشود؛ nstype یک نقاب بیتی ترکیبی از یک یا چند مورد از ثابتهای CLONE_NEW* است، برای مثالsetns(fd, os.CLONE_NEWUTS | os.CLONE_NEWPID). عضویتهای فراخواننده در فضای نام های مشخصنشده بدون تغییر باقی میمانند.fd میتواند هر شیءای باشد که متد
fileno()دارد، یا یک توصیفگر پرونده خام.این مثال نخ را دوباره به فضای نام شبکهی فرایند
initمتصل میکند:fd = os.open("/proc/1/ns/net", os.O_RDONLY) os.setns(fd, os.CLONE_NEWNET) os.close(fd)
دسترسپذیری: Linux >= 3.0 with glibc >= 2.14.
اضافه شده در نسخهی 3.12.
همچنین ملاحظه نمائید
تابع
unshare().
- os.setpgrp()¶
فراخوانی سیستمی
setpgrp()یاsetpgrp(0, 0)را، بسته به اینکه کدام نسخه پیادهسازی شده است (در صورت وجود)، انجام میدهد. برای معنای آن به راهنمای یونیکس مراجعه کنید.دسترسپذیری: Unix, not WASI.
- os.setpgid(pid, pgrp, /)¶
فراخوانی سیستمی
setpgid()را برای تنظیم شناسهی گروه فرایندِ فرایند با شناسهی pid به گروه فرایند با شناسهی pgrp انجام دهید. برای معنای آن به راهنمای Unix مراجعه کنید.دسترسپذیری: Unix, not WASI.
- os.setpriority(which, who, priority)¶
اولویت زمانبندی برنامه را تنظیم میکند. مقدار which یکی از
PRIO_PROCESS،PRIO_PGRP، یاPRIO_USERاست، و who نسبت به which تفسیر میشود (شناسهی فرایند برایPRIO_PROCESS، شناسهی گروه فرایند برایPRIO_PGRP، و شناسهی کاربر برایPRIO_USER). مقدار صفر برای who (بهترتیب) نشاندهندهی فرایند فراخوان، گروه فرایندِ فرایند فراخوان، یا شناسهی کاربر واقعیِ فرایند فراخوان است. priority مقداری در بازهی -۲۰ تا ۱۹ است. اولویت پیشفرض ۰ است؛ اولویتهای پایینتر باعث زمانبندی مطلوبتر میشوند.دسترسپذیری: Unix, not WASI.
اضافه شده در نسخهی 3.3.
- os.setregid(rgid, egid, /)¶
شناسههای گروه واقعی و مؤثر فرایند جاری را تنظیم میکند.
دسترسپذیری: Unix, not WASI, not Android.
- os.setresgid(rgid, egid, sgid, /)¶
شناسههای گروه واقعی، مؤثر و ذخیرهشدهی فرایند جاری را تنظیم میکند.
دسترسپذیری: Unix, not WASI, not Android, not macOS, not iOS.
اضافه شده در نسخهی 3.2.
- os.setresuid(ruid, euid, suid, /)¶
شناسههای کاربری واقعی، مؤثر و ذخیرهشدهی فرایند جاری را تنظیم میکند.
دسترسپذیری: Unix, not WASI, not Android, not macOS, not iOS.
اضافه شده در نسخهی 3.2.
- os.setreuid(ruid, euid, /)¶
شناسههای کاربری واقعی و مؤثر فرایند جاری را تنظیم میکند.
دسترسپذیری: Unix, not WASI, not Android.
- os.getsid(pid, /)¶
فراخوانی سیستمی
getsid()را انجام دهید. برای معنا به راهنمای Unix مراجعه کنید.دسترسپذیری: Unix, not WASI.
- os.setsid()¶
فراخوانی سیستمی
setsid()را انجام دهید. برای معنای آن به راهنمای یونیکس مراجعه کنید.دسترسپذیری: Unix, not WASI.
- os.setuid(uid, /)¶
شناسه کاربری فرآیند جاری را تنظیم میکند.
دسترسپذیری: Unix, not WASI, not Android.
- os.strerror(code, /)¶
پیام خطای متناظر با کد خطای موجود در code را برمیگرداند. در سکوهایی که
strerror()هنگام دریافت یک شماره خطای ناشناختهNULLبرمیگرداند،ValueErrorپرتاب میشود.
- os.supports_bytes_environ¶
اگر نوع سیستمعامل بومی محیط، بایت باشد،
Trueاست (برای مثال، در ویندوزFalseاست).اضافه شده در نسخهی 3.2.
- os.umask(mask, /)¶
umask عددی جاری را تنظیم کنید و umask پیشین را برگردانید
این تابع در WASI یک تابع stub است؛ برای اطلاعات بیشتر سکوهای WebAssembly را ببینید.
- os.uname()¶
اطلاعات شناساییکننده سیستمعامل جاری را برمیگرداند. مقدار بازگشتی یک
uname_resultاست.در macOS، iOS و Android، این نام و نسخهی هسته را برمیگرداند (یعنی در macOS و iOS
'Darwin'؛ در Android'Linux'). برای دریافت نام و نسخهی سیستمعامل قابلمشاهده برای کاربر در iOS و Android میتوان ازplatform.uname()استفاده کرد.همچنین ملاحظه نمائید
sys.platformکه دانهبندی دقیقتری دارد.ماژول
platformبررسیهای دقیقی برای هویت سیستم ارائه میدهد.دسترسپذیری: Unix.
تغییر یافته در نسخهی 3.3: نوع برگشتی از یک تاپل به یک شیء تاپلمانند با ویژگیهای نامدار تغییر کرد.
- class os.uname_result¶
نام و اطلاعات دربارهی سیستم که توسط
os.uname()بازگردانده میشود. این ویژگیها با اعضای توصیفشده در uname(2) مطابقت دارند.برای سازگاری با نسخههای پیشین، این شیء نیز پیمایشپذیر است و مانند یک تاپل پنجعضوی شامل
sysname،nodename،release،versionوmachineبه همین ترتیب رفتار میکند.- sysname¶
نام سیستمعامل.
- nodename¶
نام ماشین در شبکه. برخی سیستمها
nodenameرا به ۸ نویسه یا به کامپوننت ابتدایی کوتاه میکنند؛ راه بهتر برای دریافت نام میزبانsocket.gethostname()یا حتیsocket.gethostbyaddr(socket.gethostname())است.
- release¶
نسخهی سیستمعامل.
- version¶
نسخهی سیستمعامل.
- machine¶
شناسهی سختافزار.
- os.unsetenv(key, /)¶
متغیر محیطی با نام key را حذف (unset) میکند. چنین تغییراتی در محیط، بر زیرفرایندهای راهاندازیشده با
os.system()،popen()یاfork()وexecv()تأثیر میگذارد.حذف آیتمها از
os.environبهطور خودکار به یک فراخوانی متناظر ازunsetenv()تبدیل میشود؛ با این حال، فراخوانیهایunsetenv()،os.environرا بهروزرسانی نمیکنند، بنابراین در واقع بهتر است آیتمهایos.environرا حذف کنید.همچنین تابع
os.reload_environ()را ببینید.یک رویداد حسابرسی
os.unsetenvرا با آرگومانkeyپرتاب میکند.تغییر یافته در نسخهی 3.9: این تابع اکنون همیشه در دسترس است و در ویندوز نیز در دسترس است.
بخشهایی از زمینه اجرای فرایند را جدا میکند و آنها را به یک فضای نام تازه ایجادشده منتقل میکند. برای جزئیات بیشتر، صفحه راهنمای unshare(2) را ببینید. آرگومان flags یک نقاب بیتی است که صفر یا چند مورد از ثابتهای CLONE_* را ترکیب میکند و مشخص میکند کدام بخشهای زمینه اجرا باید از ارتباطات موجود خود جدا شوند و به یک فضای نام جدید منتقل شوند. اگر آرگومان flags برابر
0باشد، هیچ تغییری در زمینه اجرای فرایند فراخوان ایجاد نمیشود.دسترسپذیری: Linux >= 2.6.16.
اضافه شده در نسخهی 3.12.
همچنین ملاحظه نمائید
تابع
setns().
ایجاد شیء پرونده¶
این توابع اشیای پرونده جدیدی ایجاد میکنند. (همچنین برای باز کردن توصیفگرهای پرونده open() را ببینید.)
عملیات توصیفگر پرونده¶
این توابع بر جریانهای ورودی/خروجی که با توصیفگرهای پرونده به آنها ارجاع داده میشوند، عمل میکنند.
توصیفگرهای پرونده (file descriptors) اعداد صحیح کوچکی هستند که به پروندهای که فرایند جاری آن را باز کرده است مربوط میشوند. برای مثال، ورودی استاندارد معمولاً توصیفگر پرونده ۰ است، خروجی استاندارد ۱ است و خطای استاندارد ۲ است. سپس به پروندههای دیگری که توسط یک فرایند باز میشوند، توصیفگرهای ۳، ۴، ۵ و به همین ترتیب اختصاص داده میشود. نام «file descriptor» کمی فریبنده است؛ در پلتفرمهای یونیکسی، به سوکتها و پایپها نیز با توصیفگرهای پرونده ارجاع داده میشود.
میتوان از متد fileno() برای دریافت توصیفگر پرونده مرتبط با یک file object در صورت نیاز استفاده کرد. توجه داشته باشید که استفاده مستقیم از توصیفگر پرونده، متدهای شیء پرونده را دور میزند و جنبههایی مانند بافرینگ داخلی دادهها را نادیده میگیرد.
- os.close(fd)¶
بستن توصیفگر پرونده fd.
- os.closerange(fd_low, fd_high, /)¶
تمام توصیفگرهای پرونده را از fd_low (شامل) تا fd_high (غیرشامل) میبندد و خطاها را نادیده میگیرد. معادل است با (اما بسیار سریعتر از):
for fd in range(fd_low, fd_high): try: os.close(fd) except OSError: pass
- os.copy_file_range(src, dst, count, offset_src=None, offset_dst=None)¶
count بایت را از توصیفگر پرونده src، با شروع از آفست offset_src، به توصیفگر پرونده dst، با شروع از آفست offset_dst کپی میکند. اگر offset_src
Noneباشد، src از موقعیت فعلی خوانده میشود؛ بههمینترتیب برای offset_dst.در هسته لینوکس قدیمیتر از 5.3، پروندههایی که src و dst به آنها اشاره میکنند باید در یک سامانه فایلبندی قرار داشته باشند، در غیر این صورت یک
OSErrorپرتاب میشود کهerrnoآن رویerrno.EXDEVتنظیم شده است.این کپی بدون هزینهی اضافی انتقال داده از هسته به فضای کاربر و سپس بازگشت آن به هسته انجام میشود. علاوه بر این، برخی سامانه فایلبندیها میتوانند بهینهسازیهای اضافی را پیادهسازی کنند، مانند استفاده از رفلینکها (reflinks) (یعنی دو یا چند آینود (inodes) که نشانگرهایی را به بلوکهای دیسک یکسان با کپی هنگام نوشتن (copy-on-write) به اشتراک میگذارند؛ سامانه فایلبندیهای پشتیبانیشده شامل btrfs و XFS میشوند) و کپی سمت سرور (server-side copy) (در مورد NFS).
این تابع بایتها را بین دو توصیفگر پرونده کپی میکند. گزینههای متنی، مانند کدگذاری و پایان خط، نادیده گرفته میشوند.
مقدار بازگشتی، میزان بایتهای کپیشده است. این مقدار ممکن است کمتر از میزان درخواستشده باشد.
توجه
در لینوکس، برای کپی کردن محدودهای از یک شبهپرونده در سامانه فایلبندی خاصی مانند procfs و sysfs نباید از
os.copy_file_range()استفاده کنید. این تابع همیشه بدون کپی کردن هیچ بایتی، ۰ را برمیگرداند، گویی که پرونده خالی است؛ زیرا یک مشکل شناختهشده در هسته لینوکس وجود دارد.دسترسپذیری: Linux >= 4.5 with glibc >= 2.27.
اضافه شده در نسخهی 3.8.
- os.device_encoding(fd)¶
رشتهای را برمیگرداند که کدگذاری دستگاه مرتبط با fd را توصیف میکند، اگر به یک پایانه متصل باشد؛ در غیر این صورت
Noneرا برمیگرداند.در یونیکس، اگر حالت UTF-8 پایتون فعال باشد، بهجای کدگذاری دستگاه،
'UTF-8'را برمیگرداند.تغییر یافته در نسخهی 3.10: در یونیکس، این تابع اکنون حالت UTF-8 پایتون را پیادهسازی میکند.
- os.dup(fd, /)¶
یک کپی از توصیفگر پرونده fd برمیگرداند. توصیفگر پرونده جدید غیرقابل ارثبردن است.
در ویندوز، هنگام تکثیر یک جریان استاندارد (۰: stdin، ۱: stdout، ۲: stderr)، توصیفگر پرونده جدید قابل ارثبردن است.
دسترسپذیری: not WASI.
تغییر یافته در نسخهی 3.4: توصیفگر پرونده جدید اکنون غیرقابلارثبرداری است.
- os.dup2(fd, fd2, inheritable=True)¶
توصیفگر پرونده fd را به fd2 تکثیر میکند و در صورت لزوم، ابتدا دومی را میبندد. fd2 را برمیگرداند. توصیفگر پرونده جدید بهطور پیشفرض قابل ارثبردن است، یا اگر inheritable برابر
Falseباشد، غیرقابل ارثبردن است.دسترسپذیری: not WASI.
تغییر یافته در نسخهی 3.4: پارامتر اختیاری inheritable را اضافه کنید.
تغییر یافته در نسخهی 3.7: در صورت موفقیت، fd2 را برمیگرداند. پیش از این، همیشه
Noneبرگردانده میشد.
- os.fchmod(fd, mode)¶
حالت پرونده مشخصشده با fd را به mode عددی تغییر دهید. برای مقادیر ممکن mode، مستندات
chmod()را ببینید. از پایتون 3.3 به بعد، این معادلos.chmod(fd, mode)است.یک رویداد حسابرسی
os.chmodرا با آرگومانهایpath،modeوdir_fdپرتاب میکند.دسترسپذیری: Unix, Windows.
این تابع در WASI محدود است، برای اطلاعات بیشتر سکوهای WebAssembly را ببینید.
تغییر یافته در نسخهی 3.13: پشتیبانی در ویندوز افزوده شد.
- os.fchown(fd, uid, gid)¶
شناسه مالک و شناسه گروه پرونده دادهشده با fd را به uid و gid عددی تغییر دهید. برای آنکه یکی از شناسهها را بدون تغییر بگذارید، آن را روی -1 تنظیم کنید.
chown()را ببینید. از پایتون 3.3 به بعد، این معادلos.chown(fd, uid, gid)است.یک رویداد حسابرسی
os.chownرا با آرگومانهایpath،uid،gidوdir_fdپرتاب میکند.دسترسپذیری: Unix.
این تابع در WASI محدود است، برای اطلاعات بیشتر سکوهای WebAssembly را ببینید.
- os.fdatasync(fd)¶
نوشتن پرونده با توصیفگر پرونده fd روی دیسک را اجبار میکند. بهروزرسانی فراداده را اجباری نمیکند.
دسترسپذیری: Unix, not macOS, not iOS.
- os.fpathconf(fd, name, /)¶
اطلاعات پیکربندی سیستم مرتبط با یک پرونده باز را برمیگرداند. name مقدار پیکربندی برای بازیابی را مشخص میکند؛ ممکن است رشتهای باشد که نام یک مقدار سیستمی تعریفشده است؛ این نامها در تعدادی از استانداردها (POSIX.1، Unix 95، Unix 98 و سایر استانداردها) مشخص شدهاند. برخی سکوها نیز نامهای اضافی تعریف میکنند. نامهای شناختهشده برای سیستمعامل میزبان در دیکشنری
pathconf_namesآمده است. برای متغیرهای پیکربندی که در آن نگاشت گنجانده نشدهاند، فرستادن یک عدد صحیح بهعنوان name نیز پذیرفته میشود.اگر name یک رشته باشد و شناختهشده نباشد،
ValueErrorپرتاب میشود. اگر مقدار خاصی برای name توسط سیستم میزبان پشتیبانی نشود، حتی اگر درpathconf_namesوجود داشته باشد، یکOSErrorباerrno.EINVALبهعنوان شماره خطا پرتاب میشود.از نسخهی 3.3 پایتون، این معادل
os.pathconf(fd, name)است.دسترسپذیری: Unix.
- os.fstat(fd)¶
وضعیت توصیفگر پرونده fd را دریافت میکند. یک شیء
stat_resultبرمیگرداند.از پایتون 3.3 به بعد، این معادل
os.stat(fd)است.همچنین ملاحظه نمائید
تابع
stat().
- os.fstatvfs(fd, /)¶
اطلاعات مربوط به سامانه فایلبندی حاوی پرونده مرتبط با توصیفگر پرونده fd را در یک
statvfs_resultبرمیگرداند، مانندstatvfs(). از پایتون 3.3، این معادلos.statvfs(fd)است.دسترسپذیری: Unix.
- os.fsync(fd)¶
نوشتن پرونده با توصیفگر پرونده fd را بهصورت اجباری روی دیسک انجام میدهد. در یونیکس، تابع بومی
fsync()فراخوانی میشود؛ در ویندوز، تابع_commit()مایکروسافت فراخوانی میشود.اگر کار خود را با یک file object دارای بافر در پایتون به نام f آغاز میکنید، ابتدا
f.flush()و سپسos.fsync(f.fileno())را اجرا کنید تا اطمینان حاصل شود که تمام بافرهای داخلی مرتبط با f بر روی دیسک نوشته شدهاند.دسترسپذیری: Unix, Windows.
- os.ftruncate(fd, length, /)¶
پرونده متناظر با توصیفگر پرونده (file descriptor) fd را کوتاه کنید، بهطوری که اندازه آن حداکثر length بایت باشد. از پایتون 3.3، این معادل
os.truncate(fd, length)است.یک رویداد حسابرسی
os.truncateرا با آرگومانهایfdوlengthپرتاب میکند.دسترسپذیری: Unix, Windows.
تغییر یافته در نسخهی 3.5: پشتیبانی از ویندوز اضافه شد
- os.get_blocking(fd, /)¶
حالت مسدودسازی توصیفگر پرونده را دریافت کنید: اگر پرچم
O_NONBLOCKتنظیم شده باشد،Falseو اگر پرچم پاک شده باشد،True.همچنین
set_blocking()وsocket.socket.setblocking()را ببینید.دسترسپذیری: Unix, Windows.
این تابع در WASI محدود است، برای اطلاعات بیشتر سکوهای WebAssembly را ببینید.
در ویندوز، این تابع محدود به پایپها است.
اضافه شده در نسخهی 3.5.
تغییر یافته در نسخهی 3.12: پشتیبانی از پایپها در ویندوز اضافه شد.
- os.grantpt(fd, /)¶
دسترسی به دستگاه شبهپایانهی فرعی (slave) مرتبط با دستگاه شبهپایانهی اصلی (master) را که توصیفگر پرونده fd به آن اشاره میکند، اعطا میکند. توصیفگر پرونده fd در صورت شکست بسته نمیشود.
تابع
grantpt()از کتابخانهی استاندارد C را فراخوانی میکند.دسترسپذیری: Unix, not WASI.
اضافه شده در نسخهی 3.13.
- os.isatty(fd, /)¶
اگر توصیفگر پرونده fd باز و به یک دستگاه tty-مانند متصل باشد،
Trueرا برمیگرداند، در غیر این صورتFalseرا برمیگرداند.
- os.lockf(fd, cmd, len, /)¶
اعمال، آزمایش یا حذف یک قفل POSIX روی یک توصیفگر پرونده باز. fd یک توصیفگر پرونده باز است. cmd دستور مورد استفاده را مشخص میکند - یکی از
F_LOCK،F_TLOCK،F_ULOCKیاF_TEST. len بخشی از پرونده را که باید قفل شود مشخص میکند.یک رویداد حسابرسی
os.lockfرا با آرگومانهایfd،cmdوlenپرتاب میکند.دسترسپذیری: Unix.
اضافه شده در نسخهی 3.3.
- os.F_LOCK¶
- os.F_TLOCK¶
- os.F_ULOCK¶
- os.F_TEST¶
پرچمهایی که مشخص میکنند
lockf()چه عملیاتی را انجام خواهد داد.دسترسپذیری: Unix.
اضافه شده در نسخهی 3.3.
- os.login_tty(fd, /)¶
tty را که fd توصیفگر پرونده آن است، برای یک نشست ورود جدید آماده کنید. فرایند فراخواننده را به رهبر نشست تبدیل کنید؛ tty را به tty کنترلکننده، stdin، stdout و stderr فرایند فراخواننده تبدیل کنید؛ fd را ببندید.
دسترسپذیری: Unix, not WASI.
اضافه شده در نسخهی 3.11.
- os.lseek(fd, pos, whence, /)¶
موقعیت فعلی توصیفگر پرونده fd را روی موقعیت pos تنظیم میکند، که با whence تغییر مییابد، و موقعیت جدید را بر حسب بایت نسبت به ابتدای پرونده برمیگرداند. مقادیر معتبر برای whence عبارتاند از:
SEEK_SETیا0-- تنظیم pos نسبت به ابتدای پروندهSEEK_CURیا1-- مقدار pos را نسبت به موقعیت فعلی پرونده تنظیم میکندSEEK_ENDیا2-- pos را نسبت به پایان پرونده تنظیم میکندSEEK_HOLE-- pos را به مکان بعدی داده، نسبت به pos تنظیم میکندSEEK_DATA-- pos را به حفرهی دادهی بعدی، نسبت به pos تنظیم میکند
تغییر یافته در نسخهی 3.3: افزودن پشتیبانی از
SEEK_HOLEوSEEK_DATA.
- os.SEEK_SET¶
- os.SEEK_CUR¶
- os.SEEK_END¶
پارامترهای تابع
lseek()و متدseek()در اشیاء شبهپرونده، برای استفاده بهعنوان whence جهت تنظیم نشانگر موقعیت پرونده.SEEK_SETموقعیت پرونده را نسبت به ابتدای پرونده تنظیم کنید.
SEEK_CURموقعیت پرونده را نسبت به موقعیت فعلی پرونده تنظیم کنید.
SEEK_ENDموقعیت پرونده را نسبت به پایان پرونده تنظیم میکند.
مقدارهای آنها بهترتیب ۰، ۱ و ۲ است.
- os.SEEK_HOLE¶
- os.SEEK_DATA¶
پارامترهایی برای تابع
lseek()و متدseek()در اشیاء شبهپرونده، برای مکانیابی دادهها و حفرههای پرونده در پروندههایی با تخصیص پراکنده.SEEK_DATAآفست پرونده را نسبت به موقعیت مکانیابی، به مکان بعدی حاوی داده تنظیم میکند.
SEEK_HOLEآفست پرونده را به مکان بعدی حاوی یک حفره، نسبت به موقعیت مکانیابی، تنظیم کنید. حفره بهصورت دنبالهای از صفرها تعریف میشود.
توجه
این عملیات تنها برای سامانه فایلبندیهایی که از آنها پشتیبانی میکنند، معنا دارند.
دسترسپذیری: Linux >= 3.1, macOS, Unix
اضافه شده در نسخهی 3.3.
- os.open(path, flags, mode=0o777, *, dir_fd=None)¶
پرونده path را باز میکند و پرچمهای مختلف را مطابق flags و در صورت لزوم حالت آن را مطابق mode تنظیم میکند. هنگام محاسبه mode، ابتدا مقدار umask فعلی نقاب میشود. توصیفگر پرونده برای پرونده تازه بازشده را برمیگرداند. توصیفگر پرونده جدید غیرقابلارث است.
برای توضیح مقادیر پرچم و حالت، مستندات رانتایم C را ببینید؛ ثابتهای پرچم (مانند
O_RDONLYوO_WRONLY) در ماژولosتعریف شدهاند. بهویژه، در ویندوز، برای باز کردن پروندهها در حالت دودویی، افزودنO_BINARYلازم است.این تابع میتواند با پارامتر dir_fd از مسیرهای نسبی به توصیفگرهای پوشه پشتیبانی کند.
یک رویداد حسابرسی
openرا با آرگومانهایpath،modeوflagsپرتاب میکند.تغییر یافته در نسخهی 3.4: توصیفگر پرونده جدید اکنون غیرقابلارثبرداری است.
توجه
این تابع برای ورودی/خروجی سطح پایین در نظر گرفته شده است. برای استفادهی عادی، از تابع توکار
open()استفاده کنید، که یک file object با متدهایread()وwrite()را بازمیگرداند. برای دربرگرفتن یک توصیفگر پرونده در یک شیء پرونده، ازfdopen()استفاده کنید.تغییر یافته در نسخهی 3.3: پارامتر dir_fd اضافه شد.
تغییر یافته در نسخهی 3.5: اگر فراخوانی سیستمی دچار وقفه شود و مدیر سیگنال استثنایی پرتاب نکند، تابع اکنون بهجای پرتاب استثنای
InterruptedError، فراخوانی سیستمی را مجدداً اجرا میکند (برای مشاهده دلیل، PEP 475 را ببینید).تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
ثابتهای زیر گزینههایی برای پارامتر flags در تابع open() هستند. میتوان آنها را با استفاده از عملگر OR بیتی | ترکیب کرد. برخی از آنها در همه سکوها در دسترس نیستند. برای توضیحات مربوط به دسترسپذیری و کاربرد آنها، به صفحه راهنمای open(2) در یونیکس یا MSDN در ویندوز مراجعه کنید.
- os.O_RDONLY¶
- os.O_WRONLY¶
- os.O_RDWR¶
- os.O_APPEND¶
- os.O_CREAT¶
- os.O_EXCL¶
- os.O_TRUNC¶
ثابتهای فوق در یونیکس و ویندوز در دسترس هستند.
- os.O_DSYNC¶
- os.O_RSYNC¶
- os.O_SYNC¶
- os.O_NDELAY¶
- os.O_NONBLOCK¶
- os.O_NOCTTY¶
- os.O_CLOEXEC¶
ثابتهای فوق تنها در یونیکس در دسترس هستند.
تغییر یافته در نسخهی 3.3: افزودن ثابت
O_CLOEXEC.
- os.O_BINARY¶
- os.O_NOINHERIT¶
- os.O_SHORT_LIVED¶
- os.O_TEMPORARY¶
- os.O_RANDOM¶
- os.O_SEQUENTIAL¶
- os.O_TEXT¶
ثابتهای بالا فقط در ویندوز در دسترس هستند.
- os.O_EVTONLY¶
- os.O_FSYNC¶
- os.O_SYMLINK¶
- os.O_NOFOLLOW_ANY¶
ثابتهای فوق تنها در macOS در دسترس هستند.
تغییر یافته در نسخهی 3.10: ثابتهای
O_EVTONLY،O_FSYNC،O_SYMLINKوO_NOFOLLOW_ANYاضافه شدند.
- os.O_ASYNC¶
- os.O_DIRECT¶
- os.O_DIRECTORY¶
- os.O_NOFOLLOW¶
- os.O_NOATIME¶
- os.O_PATH¶
- os.O_TMPFILE¶
- os.O_SHLOCK¶
- os.O_EXLOCK¶
ثابتهای بالا افزونه هستند و در صورتی که توسط کتابخانه C تعریف نشده باشند، وجود ندارند.
- os.openpty()¶
یک جفت شبهپایانه (pseudo-terminal) جدید را باز میکند. یک جفت توصیفگر پرونده
(master, slave)را بهترتیب برای pty و tty برمیگرداند. توصیفگرهای پرونده جدید غیرقابل ارثبردن هستند. برای رویکردی (اندکی) قابلحملتر، از ماژولptyاستفاده کنید.دسترسپذیری: Unix, not WASI.
تغییر یافته در نسخهی 3.4: توصیفگرهای پرونده جدید اکنون غیرقابل ارثبری هستند.
- os.pipe()¶
یک پایپ ایجاد میکند. یک جفت توصیفگر پرونده
(r, w)برمیگرداند که بهترتیب برای خواندن و نوشتن قابل استفاده هستند. توصیفگر پرونده جدید غیرقابل ارثبردن است.دسترسپذیری: Unix, Windows.
تغییر یافته در نسخهی 3.4: توصیفگرهای پرونده جدید اکنون غیرقابل ارثبری هستند.
- os.pipe2(flags, /)¶
یک پایپ ایجاد میکند که flags آن بهصورت اتمی تنظیم شده است. میتوان flags را با OR کردن یک یا چند مقدار از این مقادیر با یکدیگر ساخت:
O_NONBLOCK،O_CLOEXEC. یک جفت توصیفگر پرونده(r, w)برمیگرداند که بهترتیب برای خواندن و نوشتن قابل استفاده هستند.دسترسپذیری: Unix, not WASI, not macOS, not iOS.
اضافه شده در نسخهی 3.3.
- os.posix_fallocate(fd, offset, len, /)¶
تضمین میکند که فضای دیسک کافی برای پروندهای که با fd مشخص شده است، از offset به طول len بایت تخصیص داده شود.
دسترسپذیری: Unix, not macOS, not iOS.
اضافه شده در نسخهی 3.3.
- os.posix_fadvise(fd, offset, len, advice, /)¶
قصد دسترسی به دادهها در الگویی مشخص را اعلام میکند و به این ترتیب به هسته اجازه میدهد بهینهسازیهایی انجام دهد. این توصیه به ناحیهای از پرونده مشخصشده با fd اعمال میشود که از offset شروع میشود و به طول len بایت ادامه دارد. advice یکی از
POSIX_FADV_NORMAL،POSIX_FADV_SEQUENTIAL،POSIX_FADV_RANDOM،POSIX_FADV_NOREUSE،POSIX_FADV_WILLNEEDیاPOSIX_FADV_DONTNEEDاست.دسترسپذیری: Unix, not macOS, not iOS.
اضافه شده در نسخهی 3.3.
- os.POSIX_FADV_NORMAL¶
- os.POSIX_FADV_SEQUENTIAL¶
- os.POSIX_FADV_RANDOM¶
- os.POSIX_FADV_NOREUSE¶
- os.POSIX_FADV_WILLNEED¶
- os.POSIX_FADV_DONTNEED¶
پرچمهایی که میتوان از آنها در advice در
posix_fadvise()استفاده کرد و الگوی دسترسیای را که احتمالاً استفاده خواهد شد، مشخص میکنند.دسترسپذیری: Unix.
اضافه شده در نسخهی 3.3.
- os.pread(fd, n, offset, /)¶
حداکثر n بایت را از توصیفگر پرونده fd در موقعیت offset بخوانید، در حالی که آفست پرونده بدون تغییر باقی میماند.
یک رشتهبایت (bytestring) شامل بایتهای خواندهشده برمیگرداند. اگر به انتهای پروندهای که fd به آن اشاره دارد رسیده باشد، یک شیء bytes خالی برگردانده میشود.
دسترسپذیری: Unix.
اضافه شده در نسخهی 3.3.
- os.posix_openpt(oflag, /)¶
یک دستگاه شبهپایانهی اصلی را باز میکند و یک توصیفگر پرونده برای آن برمیگرداند.
تابع
posix_openpt()از کتابخانه استاندارد C را فراخوانی میکند. آرگومان oflag برای تنظیم پرچمهای وضعیت پرونده و حالتهای دسترسی به پرونده، همانطور که در صفحه راهنمایposix_openpt()در سیستم شما مشخص شده است، استفاده میشود.توصیفگر پرونده برگرداندهشده غیرقابل ارثبردن است. اگر مقدار
O_CLOEXECدر سیستم در دسترس باشد، به oflag اضافه میشود.دسترسپذیری: Unix, not WASI.
اضافه شده در نسخهی 3.13.
- os.preadv(fd, buffers, offset, flags=0, /)¶
از یک توصیفگر پرونده fd در موقعیت offset به درون buffers، که اشیاء شبهبایت تغییرپذیر هستند، میخواند و آفست پرونده را بدون تغییر باقی میگذارد. دادهها را به هر بافر منتقل میکند تا آن بافر پر شود، سپس برای نگهداری باقیماندهی دادهها به بافر بعدی در دنباله میرود.
آرگومان flags شامل OR بیتی (bitwise OR) از صفر یا چند مورد از پرچمهای زیر است:
تعداد کل بایتهای واقعاً خواندهشده را برمیگرداند که میتواند کمتر از ظرفیت کل همهی شیءها باشد.
سیستمعامل ممکن است محدودیتی (
sysconf()مقدار'SC_IOV_MAX') برای تعداد بافرهای قابل استفاده تعیین کند.عملکرد
os.readv()وos.pread()را ترکیب میکند.دسترسپذیری: Linux >= 2.6.30, FreeBSD >= 6.0, OpenBSD >= 2.7, AIX >= 7.1.
استفاده از پرچمها نیازمند Linux >= 4.6 است.
اضافه شده در نسخهی 3.7.
- os.RWF_NOWAIT¶
برای دادههایی که بلافاصله در دسترس نیستند، صبر نکنید. اگر این پرچم تعیین شده باشد، فراخوانی سیستمی در صورتی که مجبور باشد دادهای را از فضای ذخیرهسازی پشتیبان بخواند یا منتظر یک قفل بماند، بلافاصله بازمیگردد.
اگر مقداری داده با موفقیت خوانده شود، تعداد بایتهای خواندهشده را بازمیگرداند. اگر هیچ بایتی خوانده نشود،
-1را بازمیگرداند و errno را رویerrno.EAGAINتنظیم میکند.دسترسپذیری: Linux >= 4.14.
اضافه شده در نسخهی 3.7.
- os.RWF_HIPRI¶
خواندن/نوشتن با اولویت بالا. به سامانه فایلبندیهای مبتنی بر بلوک اجازه میدهد از پایش (polling) دستگاه استفاده کنند، که تأخیر کمتری به همراه دارد، اما ممکن است منابع اضافی مصرف کند.
در حال حاضر، در لینوکس، این قابلیت فقط برای توصیفگر پروندهای که با پرچم
O_DIRECTباز شده است، قابل استفاده است.دسترسپذیری: Linux >= 4.6.
اضافه شده در نسخهی 3.7.
- os.ptsname(fd, /)¶
نام دستگاه شبهپایانه پیرو (slave pseudo-terminal device) مرتبط با دستگاه شبهپایانه اصلی (master pseudo-terminal device) که توصیفگر پرونده fd به آن اشاره میکند را برمیگرداند. توصیفگر پرونده fd در صورت شکست بسته نمیشود.
اگر تابع بازورودی (reentrant)
ptsname_r()از کتابخانه استاندارد C در دسترس باشد، آن را فراخوانی میکند؛ در غیر این صورت، تابعptsname()از کتابخانه استاندارد C فراخوانی میشود که ایمنی آن در برابر نخها (thread-safe) تضمین نشده است.دسترسپذیری: Unix, not WASI.
اضافه شده در نسخهی 3.13.
- os.pwrite(fd, str, offset, /)¶
رشته بایتی موجود در str را به توصیفگر پرونده fd در موقعیت offset مینویسد، در حالی که آفست پرونده بدون تغییر باقی میماند.
تعداد بایتهای واقعاً نوشتهشده را بازمیگرداند.
دسترسپذیری: Unix.
اضافه شده در نسخهی 3.3.
- os.pwritev(fd, buffers, offset, flags=0, /)¶
محتوای buffers را در آفست offset در توصیفگر پرونده fd مینویسد، در حالی که آفست پرونده بدون تغییر باقی میماند. buffers باید دنبالهای از اشیاء شبهبایت (bytes-like objects) باشد. بافرها به ترتیب آرایه پردازش میشوند. پیش از رفتن به بافر دوم، تمام محتوای بافر نخست نوشته میشود و به همین ترتیب ادامه مییابد.
آرگومان flags شامل OR بیتی (bitwise OR) از صفر یا چند مورد از پرچمهای زیر است:
تعداد کل بایتهای واقعاً نوشتهشده را برمیگرداند.
سیستمعامل ممکن است محدودیتی (
sysconf()مقدار'SC_IOV_MAX') برای تعداد بافرهای قابل استفاده تعیین کند.عملکرد
os.writev()وos.pwrite()را ترکیب میکند.دسترسپذیری: Linux >= 2.6.30, FreeBSD >= 6.0, OpenBSD >= 2.7, AIX >= 7.1.
استفاده از پرچمها نیازمند Linux >= 4.6 است.
اضافه شده در نسخهی 3.7.
- os.RWF_DSYNC¶
معادلی بهازای هر نوشتن از پرچم
O_DSYNCدرos.open()فراهم میکند. اثر این پرچم تنها به محدوده دادهای اعمال میشود که بهوسیله فراخوانی سیستم نوشتهشده است.دسترسپذیری: Linux >= 4.7.
اضافه شده در نسخهی 3.7.
- os.RWF_SYNC¶
معادلی بهازای هر نوشتن از پرچم
O_SYNCدرos.open()فراهم میکند. اثر این پرچم فقط به محدوده دادهای اعمال میشود که توسط فراخوانی سیستمی نوشته میشود.دسترسپذیری: Linux >= 4.7.
اضافه شده در نسخهی 3.7.
- os.RWF_APPEND¶
معادلی بهازای هر بار نوشتن برای پرچم
O_APPENDدرos.open()فراهم میکند. این پرچم فقط برایos.pwritev()معنا دارد، و اثر آن فقط بر محدوده دادهای است که فراخوانی سیستم آن را مینویسد. آرگومان offset بر عملیات نوشتن تأثیری ندارد؛ داده همیشه به پایان پرونده الحاق میشود. با این حال، اگر آرگومان offset برابر-1باشد، offset فعلی پرونده بهروزرسانی میشود.دسترسپذیری: Linux >= 4.16.
اضافه شده در نسخهی 3.10.
- os.read(fd, n, /)¶
حداکثر n بایت را از توصیفگر پرونده fd بخوانید.
یک رشتهبایت (bytestring) شامل بایتهای خواندهشده برمیگرداند. اگر به انتهای پروندهای که fd به آن اشاره دارد رسیده باشد، یک شیء bytes خالی برگردانده میشود.
توجه
این تابع برای ورودی/خروجی سطح پایین در نظر گرفته شده است و باید روی یک توصیفگر پرونده که توسط
os.open()یاpipe()برگردانده شده است اعمال شود. برای خواندن یک «شیء پرونده» که توسط تابع توکارopen()یاpopen()یاfdopen()برگردانده شده است، یاsys.stdin، از متدهایread()یاreadline()آن استفاده کنید.تغییر یافته در نسخهی 3.5: اگر فراخوانی سیستمی دچار وقفه شود و مدیر سیگنال استثنایی پرتاب نکند، تابع اکنون بهجای پرتاب استثنای
InterruptedError، فراخوانی سیستمی را مجدداً اجرا میکند (برای مشاهده دلیل، PEP 475 را ببینید).
- os.readinto(fd, buffer, /)¶
خواندن از یک توصیفگر پرونده fd به درون یک شیء بافر تغییرپذیر buffer.
buffer باید تغییرپذیر و شبهبایت باشد. در صورت موفقیت، تعداد بایتهای خواندهشده را برمیگرداند. ممکن است تعداد بایتهای خواندهشده کمتر از اندازه buffer باشد. فراخوانی سیستمی زیربنی هنگامی که با یک سیگنال قطع شود، دوباره تلاش خواهد شد، مگر آنکه هندلر سیگنال استثنایی پرتاب کند. برای سایر خطاها دوباره تلاش نخواهد شد و خطایی پرتاب خواهد شد.
اگر fd در پایان پرونده باشد یا buffer ارائهشده طول ۰ داشته باشد، ۰ را برمیگرداند (که میتوان از آن برای بررسی خطاها بدون خواندن داده استفاده کرد). هرگز مقدار منفی برنمیگرداند.
توجه
این تابع برای ورودی/خروجی سطح پایین در نظر گرفته شده است و باید بر توصیفگر پروندهای که توسط
os.open()یاos.pipe()برگردانده شده است، اعمال شود. برای خواندن یک «شیء پرونده» برگرداندهشده توسط تابع توکارopen()، یاsys.stdin، از متدهای عضو آن استفاده کنید، برای مثالio.BufferedIOBase.readinto()،io.BufferedIOBase.read()یاio.TextIOBase.read()اضافه شده در نسخهی 3.14.
- os.sendfile(out_fd, in_fd, offset, count)¶
- os.sendfile(out_fd, in_fd, offset, count, headers=(), trailers=(), flags=0)
count بایت را از توصیفگر پرونده in_fd به توصیفگر پرونده out_fd با شروع از offset کپی میکند. تعداد بایتهای ارسالشده را برمیگرداند. در صورت رسیدن به EOF،
0را برمیگرداند.اولین نمادگذاری تابع در همه سکوهایی که
sendfile()را تعریف میکنند، پشتیبانی میشود.در لینوکس، اگر offset بهصورت
Noneداده شود، بایتها از موقعیت فعلی in_fd خوانده میشوند و موقعیت in_fd بهروزرسانی میشود.میتوان از حالت دوم در macOS و FreeBSD استفاده کرد؛ در آنها headers و trailers دنبالههای دلخواهی از بافرها هستند که پیش از نوشتن دادههای in_fd و پس از نوشتن آنها نوشته میشوند. این حالت همان مقدار حالت اول را برمیگرداند.
در macOS و FreeBSD، مقدار
0برای count مشخص میکند که ارسال تا رسیدن به پایان in_fd ادامه یابد.همهی سکوها از سوکتها بهعنوان توصیفگر پرونده out_fd پشتیبانی میکنند و برخی سکوها انواع دیگر (برای مثال پرونده معمولی، پایپ) را نیز مجاز میدانند.
برنامههای کاربردی چندسکویی نباید از آرگومانهای headers، trailers و flags استفاده کنند.
دسترسپذیری: Unix, not WASI.
توجه
برای پوششی سطح بالاتر از
sendfile()،socket.socket.sendfile()را ببینید.اضافه شده در نسخهی 3.3.
تغییر یافته در نسخهی 3.9: پارامترهای out و in به out_fd و in_fd تغییر نام یافتند.
- os.SF_NODISKIO¶
- os.SF_MNOWAIT¶
- os.SF_SYNC¶
پارامترهای تابع
sendfile()، اگر پیادهسازی از آنها پشتیبانی کند.دسترسپذیری: Unix, not WASI.
اضافه شده در نسخهی 3.3.
- os.SF_NOCACHE¶
پارامتر برای تابع
sendfile()، اگر پیادهسازی از آن پشتیبانی کند. دادهها در نهانگاه حافظه مجازی ذخیره نمیشوند و پس از آن آزاد میشوند.دسترسپذیری: Unix, not WASI.
اضافه شده در نسخهی 3.11.
- os.set_blocking(fd, blocking, /)¶
حالت مسدودسازی توصیفگر پرونده مشخصشده را تنظیم کنید. اگر مسدودسازی
Falseباشد، پرچمO_NONBLOCKرا تنظیم کنید، در غیر این صورت پرچم را پاک کنید.همچنین
get_blocking()وsocket.socket.setblocking()را ببینید.دسترسپذیری: Unix, Windows.
این تابع در WASI محدود است، برای اطلاعات بیشتر سکوهای WebAssembly را ببینید.
در ویندوز، این تابع محدود به پایپها است.
اضافه شده در نسخهی 3.5.
تغییر یافته در نسخهی 3.12: پشتیبانی از پایپها در ویندوز اضافه شد.
- os.splice(src, dst, count, offset_src=None, offset_dst=None, flags=0)¶
count بایت را از توصیفگر پرونده src، با شروع از آفست offset_src، به توصیفگر پرونده dst، با شروع از آفست offset_dst منتقل میکند.
میتوان رفتار الحاق (splicing) را با تعیین یک مقدار برای flags تغییر داد. میتوان از هر یک از متغیرهای زیر استفاده کرد و آنها را با OR بیتبهبیت (عملگر
|) ترکیب کرد:اگر
SPLICE_F_MOVEمشخص شده باشد، از هسته خواسته میشود که صفحهها را بهجای کپی کردن جابهجا کند، اما اگر هسته نتواند صفحهها را از پایپ جابهجا کند، ممکن است صفحهها همچنان کپی شوند.اگر
SPLICE_F_NONBLOCKتعیین شده باشد، از هسته خواسته میشود که در ورودی/خروجی مسدود نشود. این باعث میشود عملیاتهای پایپ splice غیرمسدودکننده شوند، اما با این حال ممکن است splice مسدود شود، زیرا ممکن است توصیفگرهای پرونده spliceشده مسدود شوند.اگر
SPLICE_F_MOREمشخص شده باشد، به هسته اشاره میکند که دادههای بیشتری در یک اسپلایس (splice) بعدی خواهند آمد.
حداقل یکی از توصیفگرهای پرونده باید به یک پایپ اشاره کند. اگر offset_src برابر
Noneباشد، آنگاه src از موقعیت فعلی خوانده میشود؛ بههمین ترتیب برای offset_dst. آفست مرتبط با توصیفگر پروندهای که به یک پایپ اشاره میکند، بایدNoneباشد. پروندههایی که src و dst به آنها اشاره میکنند باید در یک سامانه فایلبندی یکسان قرار داشته باشند، در غیر این صورت یکOSErrorپرتاب میشود کهerrnoآن رویerrno.EXDEVتنظیم شده است.این کپی بدون هزینه اضافی انتقال داده از هسته به فضای کاربر و سپس بازگشت به هسته انجام میشود. علاوه بر این، برخی سامانه فایلبندیها میتوانند بهینهسازیهای بیشتری را پیادهسازی کنند. این کپی بهگونهای انجام میشود که گویی هر دو پرونده بهصورت دودویی باز شدهاند.
پس از تکمیل موفقیتآمیز، تعداد بایتهایی که به پایپ یا از آن پیوند داده شدهاند (spliced) را برمیگرداند. مقدار بازگشتی ۰ به معنای پایان ورودی است. اگر src به یک پایپ اشاره کند، این بدان معناست که دادهای برای انتقال وجود نداشته است و مسدود شدن (block) معنایی ندارد، زیرا هیچ نویسندهای به پایانه نوشتن پایپ متصل نیست.
همچنین ملاحظه نمائید
صفحهی راهنمای splice(2).
دسترسپذیری: Linux >= 2.6.17 with glibc >= 2.5
اضافه شده در نسخهی 3.10.
- os.readv(fd, buffers, /)¶
خواندن از یک توصیفگر پرونده fd به درون تعدادی بافر تغییرپذیر از نوع شیء شبهبایتی (bytes-like object)، buffers. داده به هر بافر تا پر شدن آن منتقل میشود و سپس از بافر بعدی در دنباله برای نگهداشتن باقیماندهی داده استفاده میشود.
تعداد کل بایتهای واقعاً خواندهشده را برمیگرداند که میتواند کمتر از ظرفیت کل همهی شیءها باشد.
سیستمعامل ممکن است محدودیتی (
sysconf()مقدار'SC_IOV_MAX') برای تعداد بافرهای قابل استفاده تعیین کند.دسترسپذیری: Unix.
اضافه شده در نسخهی 3.3.
- os.tcgetpgrp(fd, /)¶
برگرداندن گروه فرایند مرتبط با پایانهی دادهشده توسط fd (یک توصیفگر پرونده باز که توسط
os.open()برگردانده میشود).دسترسپذیری: Unix, not WASI.
- os.tcsetpgrp(fd, pg, /)¶
گروه فرایند مرتبط با پایانهی دادهشده توسط fd (یک توصیفگر پرونده باز که توسط
os.open()برگرداندهشده است) را روی pg تنظیم میکند.دسترسپذیری: Unix, not WASI.
- os.ttyname(fd, /)¶
رشتهای را برمیگرداند که دستگاه پایانهی مرتبط با توصیفگر پرونده fd را مشخص میکند. اگر fd با یک دستگاه پایانه مرتبط نباشد، یک استثنا پرتاب میشود.
دسترسپذیری: Unix.
- os.unlockpt(fd, /)¶
قفل دستگاه شبهپایانهی پیرو مرتبط با دستگاه شبهپایانهی اصلی را که توصیفگر پرونده fd به آن اشاره میکند، باز کنید. توصیفگر پرونده fd در صورت شکست بسته نمیشود.
تابع
unlockpt()از کتابخانه استاندارد C را فراخوانی میکند.دسترسپذیری: Unix, not WASI.
اضافه شده در نسخهی 3.13.
- os.write(fd, str, /)¶
رشته بایتی (bytestring) موجود در str را در توصیفگر پرونده fd بنویسید.
تعداد بایتهای واقعاً نوشتهشده را بازمیگرداند.
توجه
این تابع برای ورودی/خروجی سطح پایین در نظر گرفته شده است و باید روی یک توصیفگر پرونده که توسط
os.open()یاpipe()برگردانده شده است اعمال شود. برای نوشتن در یک «شیء پرونده» که توسط تابع توکارopen()یاpopen()یاfdopen()، یاsys.stdoutیاsys.stderrبرگردانده شده است، از متدwrite()آن استفاده کنید.تغییر یافته در نسخهی 3.5: اگر فراخوانی سیستمی دچار وقفه شود و مدیر سیگنال استثنایی پرتاب نکند، تابع اکنون بهجای پرتاب استثنای
InterruptedError، فراخوانی سیستمی را مجدداً اجرا میکند (برای مشاهده دلیل، PEP 475 را ببینید).
- os.writev(fd, buffers, /)¶
محتوای buffers را در توصیفگر پرونده fd مینویسد. buffers باید دنبالهای از اشیاء شبهبایت باشد. بافرها به ترتیب آرایه پردازش میشوند. تمام محتوای نخستین بافر پیش از ادامه به دومین بافر نوشته میشود و به همین ترتیب ادامه مییابد.
تعداد کل بایتهایی که واقعاً نوشته شدهاند را برمیگرداند.
سیستمعامل ممکن است محدودیتی (
sysconf()مقدار'SC_IOV_MAX') برای تعداد بافرهای قابل استفاده تعیین کند.دسترسپذیری: Unix.
اضافه شده در نسخهی 3.3.
پرسوجوی اندازهی پایانه¶
اضافه شده در نسخهی 3.3.
- os.get_terminal_size(fd=STDOUT_FILENO, /)¶
اندازهی پنجرهی پایانه را بهصورت
(columns, lines)برمیگرداند، تاپلی از نوعterminal_size.آرگومان اختیاری
fd(پیشفرضSTDOUT_FILENO، یا خروجی استاندارد) مشخص میکند که کدام توصیفگر پرونده باید پرسوجو شود.اگر توصیفگر پرونده به یک پایانه متصل نباشد، استثنای
OSErrorپرتاب میشود.shutil.get_terminal_size()تابع سطحبالایی است که معمولاً باید از آن استفاده شود،os.get_terminal_sizeپیادهسازی سطحپایین است.دسترسپذیری: Unix, Windows.
وراثت توصیفگرهای پرونده¶
اضافه شده در نسخهی 3.4.
یک توصیفگر پرونده دارای پرچمی «قابل ارثبری» است که نشان میدهد آیا فرآیندهای فرزند میتوانند آن توصیفگر پرونده را به ارث ببرند. از پایتون 3.4، توصیفگرهای پروندهای که پایتون ایجاد میکند، بهطور پیشفرض غیرقابل ارثبری هستند.
در یونیکس، توصیفگرهای پرونده غیرقابلارثبری در فرآیندهای فرزند هنگام اجرای یک برنامه جدید بسته میشوند؛ سایر توصیفگرهای پرونده به ارث برده میشوند. توجه داشته باشید که توصیفگرهای پرونده غیرقابلارثبری همچنان در os.fork() توسط فرآیندهای فرزند به ارث برده میشوند.
در ویندوز، دستههای غیرقابلوراثت و توصیفگرهای پرونده غیرقابلوراثت در فرایندهای فرزند بسته میشوند، بهجز جریانهای استاندارد (توصیفگرهای پرونده ۰، ۱ و ۲: stdin، stdout و stderr) که همیشه به ارث میرسند. با استفاده از توابع spawn*، تمام دستههای قابلوراثت و تمام توصیفگرهای پرونده قابلوراثت به ارث میرسند. با استفاده از ماژول subprocess، تمام توصیفگرهای پرونده بهجز جریانهای استاندارد بسته میشوند، و دستههای قابلوراثت تنها در صورتی به ارث میرسند که پارامتر close_fds برابر False باشد.
در سکوهای WebAssembly، نمیتوان توصیفگر پرونده را تغییر داد.
- os.get_inheritable(fd, /)¶
پرچم «قابل ارثبردن» توصیفگر پرونده مشخصشده (یک بولی) را دریافت کنید.
- os.set_inheritable(fd, inheritable, /)¶
پرچم «قابل ارثبردن» (inheritable) را برای توصیفگر پرونده مشخصشده تنظیم کنید.
- os.get_handle_inheritable(handle, /)¶
پرچم «inheritable» دستهی مشخصشده (یک بولی) را دریافت کنید.
دسترسپذیری: Windows.
- os.set_handle_inheritable(handle, inheritable, /)¶
پرچم «قابل ارثبردن» (inheritable) را برای دستهی مشخصشده تنظیم کنید.
دسترسپذیری: Windows.
پروندهها و پوشهها¶
در برخی از سکوهای یونیکس، بسیاری از این توابع از یک یا چند مورد از این قابلیتها پشتیبانی میکنند:
مشخص کردن یک توصیفگر پرونده : بهطور معمول، آرگومان path که به توابع ماژول
osداده میشود، باید رشتهای باشد که مسیر پرونده را مشخص میکند. با این حال، برخی از توابع اکنون بهعنوان جایگزین، یک توصیفگر پرونده باز را برای آرگومان path خود میپذیرند. سپس تابع روی پروندهای که توصیفگر به آن اشاره دارد عمل میکند. در سیستمهای POSIX، پایتون نسخهای از تابع را که پیشوندfدارد فراخوانی میکند (برای مثال،fchdirرا بهجایchdirفراخوانی میکند).شما میتوانید با استفاده از
os.supports_fdبررسی کنید که آیا میتوان path را برای یک تابع خاص در پلتفرم شما بهعنوان توصیفگر پرونده (file descriptor) مشخص کرد یا خیر. اگر این قابلیت در دسترس نباشد، استفاده از آن باعث پرتابNotImplementedErrorخواهد شد.اگر تابع همچنین از آرگومانهای dir_fd یا follow_symlinks پشتیبانی کند، هنگامی که path را بهعنوان توصیفگر پرونده ارائه میدهید، مشخص کردن یکی از آنها خطا است.
مسیرهای نسبی به توصیفگرهای پوشه:** اگر dir_fd
Noneنباشد، باید یک توصیفگر پرونده باشد که به یک پوشه اشاره میکند، و مسیری که عملیات روی آن انجام میشود باید نسبی باشد؛ در این صورت مسیر نسبت به آن پوشه خواهد بود. اگر مسیر مطلق باشد، dir_fd نادیده گرفته میشود. در سیستمهای POSIX، پایتون گونهای از تابع را با پسوندatو احتمالاً با پیشوندfفراخوانی میکند (برای مثال به جایaccess،faccessatرا فراخوانی میکند).میتوانید با استفاده از
os.supports_dir_fdبررسی کنید که آیا dir_fd برای یک تابع خاص در پلتفرم شما پشتیبانی میشود یا خیر. اگر در دسترس نباشد، استفاده از آن باعث پرتاب یکNotImplementedErrorمیشود.
عدم پیروی از پیوندهای نمادین: اگر follow_symlinks برابر
Falseباشد، و آخرین عنصر مسیری که عملیات روی آن انجام میشود یک پیوند نمادین باشد، تابع بهجای پروندهای که پیوند به آن اشاره میکند، روی خود پیوند نمادین عمل میکند. در سیستمهای POSIX، پایتون نسخهl...تابع را فراخوانی میکند.میتوانید با استفاده از
os.supports_follow_symlinksبررسی کنید که آیا follow_symlinks برای یک تابع مشخص روی پلتفرم شما پشتیبانی میشود یا خیر. اگر در دسترس نباشد، استفاده از آنNotImplementedErrorپرتاب خواهد کرد.
- os.access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)¶
برای بررسی دسترسی به path از uid/gid واقعی استفاده میشود. توجه داشته باشید که بیشتر عملیات از uid/gid مؤثر استفاده میکنند، بنابراین میتوان از این روتین در یک محیط suid/sgid برای بررسی این موضوع استفاده کرد که کاربر فراخواننده به path دسترسی مشخصشده دارد یا خیر. mode باید برای بررسی وجود path برابر
F_OKباشد، یا میتواند OR شامل یک یا چند مورد ازR_OK،W_OKوX_OKبرای بررسی مجوزها باشد. اگر دسترسی مجاز باشد،Trueو در غیر این صورتFalseبرگردانده میشود. برای اطلاعات بیشتر، صفحهی راهنمای یونیکس access(2) را ببینید.این تابع میتواند از تعیین مسیرهای نسبی نسبت به توصیفگرهای پوشه و عدم دنبالکردن پیوندهای نمادین پشتیبانی کند.
اگر effective_ids برابر
Trueباشد،access()بررسیهای دسترسی خود را با استفاده از uid/gid مؤثر به جای uid/gid واقعی انجام میدهد. ممکن است effective_ids روی پلتفرم شما پشتیبانی نشود؛ میتوانید با استفاده ازos.supports_effective_idsبررسی کنید که آیا در دسترس است یا خیر. اگر در دسترس نباشد، استفاده از آن موجب پرتابNotImplementedErrorمیشود.توجه
استفاده از
access()برای بررسی اینکه کاربر مجاز است مثلاً پروندهای را باز کند، پیش از انجام واقعی آن باopen()، یک حفرهی امنیتی ایجاد میکند، زیرا کاربر ممکن است از بازهی زمانی کوتاه بین بررسی و باز کردن پرونده برای دستکاری آن سوءاستفاده کند. بهتر است از روشهای EAFP استفاده کنید. برای مثال:if os.access("myfile", os.R_OK): with open("myfile") as fp: return fp.read() return "some default data"
بهتر است بهصورت زیر نوشته شود:
try: fp = open("myfile") except PermissionError: return "some default data" else: with fp: return fp.read()
توجه
ممکن است عملیات ورودی/خروجی حتی زمانی که
access()نشان میدهد که با موفقیت انجام خواهد شد، شکست بخورد، بهویژه برای عملیات روی سامانه فایلبندیهای شبکهای که ممکن است برای دسترسیها معنایی فراتر از مدل معمول بیتهای دسترسی POSIX داشته باشند.تغییر یافته در نسخهی 3.3: پارامترهای dir_fd، effective_ids و follow_symlinks افزوده شدند.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.F_OK¶
- os.R_OK¶
- os.W_OK¶
- os.X_OK¶
مقادیری که باید بهعنوان پارامتر mode به
access()ارسال شوند تا بهترتیب وجود، قابلیت خواندن، قابلیت نوشتن و قابلیت اجرای path را آزمایش کنند.
- os.chdir(path)¶
پوشه کاری جاری را به path تغییر دهید.
این تابع میتواند از تعیین یک توصیفگر پرونده پشتیبانی کند. توصیفگر باید به یک پوشهی بازشده اشاره کند، نه یک پرونده باز.
این تابع ممکن است
OSErrorو زیرکلاسهایی مانندFileNotFoundError،PermissionErrorوNotADirectoryErrorرا پرتاب کند.یک رویداد حسابرسی
os.chdirرا با آرگومانpathپرتاب میکند.همچنین ملاحظه نمائید
مدیر زمینه
contextlib.chdir()، که هنگام ورود پوشه کاری فعلی را تغییر میدهد و هنگام خروج پوشه پیشین را بازمیگرداند.تغییر یافته در نسخهی 3.3: پشتیبانی برای مشخص کردن path بهعنوان یک توصیفگر پرونده در برخی سکوها افزوده شد.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.chflags(path, flags, *, follow_symlinks=True)¶
پرچمهای path را روی flags عددی تنظیم کنید. flags میتواند ترکیبی (OR بیتی) از مقادیر زیر باشد (همانطور که در ماژول
statتعریفشده است):این تابع میتواند از دنبال نکردن پیوندهای نمادین پشتیبانی کند.
یک رویداد حسابرسی
os.chflagsرا با آرگومانهایpathوflagsپرتاب میکند.دسترسپذیری: Unix, not WASI.
تغییر یافته در نسخهی 3.3: پارامتر follow_symlinks اضافه شد.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True)¶
حالت path را به mode عددی تغییر دهید. mode میتواند یکی از مقادیر زیر (همانطور که در ماژول
statتعریف شده است) یا ترکیبهای OR بیتی آنها را بپذیرد:این تابع میتواند از مشخص کردن یک توصیفگر پرونده، مسیرهای نسبی به توصیفگرهای پوشه و دنبالنکردن پیوندهای نمادین پشتیبانی کند.
توجه
اگرچه ویندوز از
chmod()پشتیبانی میکند، اما با آن فقط میتوانید پرچم فقطخواندنی پرونده را تنظیم کنید (از طریق ثابتهایstat.S_IWRITEوstat.S_IREADیا یک مقدار عدد صحیح متناظر). تمام بیتهای دیگر نادیده گرفته میشوند. مقدار پیشفرض follow_symlinks در ویندوزFalseاست.این تابع در WASI محدود است، برای اطلاعات بیشتر سکوهای WebAssembly را ببینید.
یک رویداد حسابرسی
os.chmodرا با آرگومانهایpath،modeوdir_fdپرتاب میکند.تغییر یافته در نسخهی 3.3: پشتیبانی برای تعیین path بهعنوان یک توصیفگر پرونده باز، و آرگومانهای dir_fd و follow_symlinks افزوده شد.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
تغییر یافته در نسخهی 3.13: پشتیبانی از توصیفگر پرونده و آرگومان follow_symlinks در ویندوز افزوده شد.
- os.chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True)¶
شناسه مالک و گروه path را به مقادیر عددی uid و gid تغییر دهید. برای اینکه یکی از شناسهها بدون تغییر بماند، آن را روی -1 تنظیم کنید.
این تابع میتواند از مشخص کردن یک توصیفگر پرونده، مسیرهای نسبی به توصیفگرهای پوشه و دنبالنکردن پیوندهای نمادین پشتیبانی کند.
برای تابع سطح بالاتری که علاوه بر شناسههای عددی، نامها را نیز میپذیرد،
shutil.chown()را ببینید.یک رویداد حسابرسی
os.chownرا با آرگومانهایpath،uid،gidوdir_fdپرتاب میکند.دسترسپذیری: Unix.
این تابع در WASI محدود است، برای اطلاعات بیشتر سکوهای WebAssembly را ببینید.
تغییر یافته در نسخهی 3.3: پشتیبانی برای تعیین path بهعنوان یک توصیفگر پرونده باز، و آرگومانهای dir_fd و follow_symlinks افزوده شد.
تغییر یافته در نسخهی 3.6: از یک path-like object پشتیبانی میکند.
- os.chroot(path)¶
پوشه ریشه فرایند جاری را به path تغییر میدهد.
دسترسپذیری: Unix, not WASI, not Android.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.fchdir(fd)¶
پوشه کاری جاری را به پوشهای که توصیفگر پرونده fd به آن اشاره میکند، تغییر میدهد. توصیفگر باید به یک پوشه باز اشاره کند، نه یک پرونده باز. از پایتون 3.3، این معادل
os.chdir(fd)است.یک رویداد حسابرسی
os.chdirرا با آرگومانpathپرتاب میکند.دسترسپذیری: Unix.
- os.getcwd()¶
رشتهای را برمیگرداند که پوشه کاری جاری را نشان میدهد.
- os.getcwdb()¶
یک رشتهبایت (bytestring) را برمیگرداند که نشاندهندهی پوشهی کاری جاری است.
تغییر یافته در نسخهی 3.8: این تابع اکنون در ویندوز به جای صفحه کد ANSI از کدگذاری UTF-8 استفاده میکند: برای دلیل آن، PEP 529 را ببینید. این تابع دیگر در ویندوز منسوخ نیست.
- os.lchflags(path, flags)¶
پرچمهای path را روی flags عددی تنظیم کنید، مانند
chflags()، اما از پیوندهای نمادین پیروی نکنید. از پایتون 3.3 به بعد، این معادلos.chflags(path, flags, follow_symlinks=False)است.یک رویداد حسابرسی
os.chflagsرا با آرگومانهایpathوflagsپرتاب میکند.دسترسپذیری: Unix, not WASI.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.lchmod(path, mode)¶
حالت path را به mode عددی تغییر دهید. اگر path یک پیوند نمادین باشد، این کار بهجای هدف بر پیوند نمادین تأثیر میگذارد. مستندات
chmod()را برای مقادیر ممکن mode ببینید. از پایتون 3.3، این معادلos.chmod(path, mode, follow_symlinks=False)است.lchmod()بخشی از POSIX نیست، اما پیادهسازیهای یونیکس ممکن است در صورتی که از تغییر حالت پیوندهای نمادین پشتیبانی شود، آن را داشته باشند.یک رویداد حسابرسی
os.chmodرا با آرگومانهایpath،modeوdir_fdپرتاب میکند.دسترسپذیری: Unix, Windows, not Linux, FreeBSD >= 1.3, NetBSD >= 1.3, not OpenBSD
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
تغییر یافته در نسخهی 3.13: پشتیبانی در ویندوز افزوده شد.
- os.lchown(path, uid, gid)¶
مالک و شناسهی گروه path را به uid و gid عددی تغییر میدهد. این تابع، پیوندهای نمادین را دنبال نمیکند. از پایتون 3.3، این معادل
os.chown(path, uid, gid, follow_symlinks=False)است.یک رویداد حسابرسی
os.chownرا با آرگومانهایpath،uid،gidوdir_fdپرتاب میکند.دسترسپذیری: Unix.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.link(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True)¶
یک پیوند سخت (hard link) با نام dst ایجاد کنید که به src اشاره میکند.
این تابع میتواند از تعیین src_dir_fd و/یا dst_dir_fd برای فراهم کردن مسیرهای نسبی نسبت به توصیفگرهای پوشه، و دنبالنکردن پیوندهای نمادین پشتیبانی کند. مقدار پیشفرض follow_symlinks در ویندوز
Falseاست.یک رویداد حسابرسی
os.linkرا با آرگومانهایsrc،dst،src_dir_fdوdst_dir_fdپرتاب میکند.دسترسپذیری: Unix, Windows.
تغییر یافته در نسخهی 3.2: پشتیبانی از ویندوز اضافه شد.
تغییر یافته در نسخهی 3.3: پارامترهای src_dir_fd، dst_dir_fd و follow_symlinks افزوده شدند.
تغییر یافته در نسخهی 3.6: یک path-like object را برای src و dst میپذیرد.
- os.listdir(path='.')¶
فهرستی شامل نام ورودیهای موجود در پوشهی دادهشده با path را برمیگرداند. ترتیب این فهرست دلخواه است و ورودیهای ویژه
'.'و'..'را حتی اگر در پوشه وجود داشته باشند شامل نمیشود. اگر پروندهای در حین فراخوانی این تابع از پوشه حذف یا به آن اضافه شود، اینکه نام آن پرونده گنجانده شود یا نه، نامشخص است.path میتواند یک path-like object باشد. اگر path از نوع
bytesباشد (بهطور مستقیم یا غیرمستقیم از طریق رابطPathLike)، نامپروندههای برگرداندهشده نیز از نوعbytesخواهند بود؛ در تمام شرایط دیگر، آنها از نوعstrخواهند بود.این تابع همچنین میتواند از تعیین یک توصیفگر پرونده پشتیبانی کند؛ توصیفگر پرونده باید به یک پوشه اشاره کند.
یک رویداد حسابرسی
os.listdirرا با آرگومانpathپرتاب میکند.توجه
برای کدگذاری نام پروندههای
strبهbytes، ازfsencode()استفاده کنید.همچنین ملاحظه نمائید
تابع
scandir()ورودیهای پوشه را به همراه اطلاعات ویژگیهای پرونده برمیگرداند و عملکرد بهتری برای بسیاری از موارد استفاده رایج فراهم میکند.تغییر یافته در نسخهی 3.2: پارامتر path اختیاری شد.
تغییر یافته در نسخهی 3.3: پشتیبانی از مشخص کردن path بهعنوان یک توصیفگر پرونده باز (open file descriptor) افزوده شد.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.listdrives()¶
فهرستی شامل نام درایوهای یک سیستم ویندوزی را برمیگرداند.
نام درایو معمولاً به شکلی مانند
'C:\\'است. هر نام درایوی لزوماً با یک حجم مرتبط نیست، و برخی ممکن است به دلایل مختلف، از جمله مجوزها، اتصال شبکه یا نبود رسانه، غیرقابلدسترسی باشند. این تابع دسترسی را بررسی نمیکند.ممکن است در صورت بروز خطا در جمعآوری نامهای درایو،
OSErrorپرتاب شود.یک رویداد حسابرسی
os.listdrivesرا بدون آرگومان پرتاب میکند.دسترسپذیری: Windows
اضافه شده در نسخهی 3.12.
- os.listmounts(volume)¶
فهرستی شامل نقاط اتصال برای یک حجم در یک سیستم ویندوزی برمیگرداند.
volume باید بهصورت یک مسیر GUID نمایش داده شود، مانند مسیرهایی که
os.listvolumes()برمیگرداند. حجمها ممکن است در چندین مکان متصل شده باشند یا اصلاً متصل نشده باشند. در حالت دوم، فهرست خالی خواهد بود. این تابع نقاط اتصال را که با یک حجم مرتبط نیستند، برنمیگرداند.نقطههای اتصالی که این تابع بازمیگرداند، مسیرهای مطلق خواهند بود و ممکن است طولانیتر از نام درایو باشند.
در صورتی که حجم شناسایی نشود یا خطایی در جمعآوری مسیرها رخ دهد،
OSErrorپرتاب میشود.یک رویداد حسابرسی
os.listmountsرا با آرگومانvolumeپرتاب میکند.دسترسپذیری: Windows
اضافه شده در نسخهی 3.12.
- os.listvolumes()¶
فهرستی شامل حجمهای موجود در سیستم را برمیگرداند.
حجمها معمولاً بهصورت یک مسیر GUID نمایش داده میشوند که شبیه
\\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\است. معمولاً میتوان به پروندهها از طریق یک مسیر GUID دسترسی داشت، مشروط به اینکه دسترسیها اجازه دهند. با این حال، کاربران عموماً با آنها آشنا نیستند، بنابراین استفادهی توصیهشده از این تابع، دریافت نقاط اتصال با استفاده ازos.listmounts()است.ممکن است در صورت بروز خطا هنگام جمعآوری حجمها،
OSErrorپرتاب شود.یک رویداد حسابرسی
os.listvolumesرا بدون آرگومان پرتاب میکند.دسترسپذیری: Windows
اضافه شده در نسخهی 3.12.
- os.lstat(path, *, dir_fd=None)¶
معادل یک فراخوانی سیستمی
lstat()را روی مسیر دادهشده انجام میدهد. مشابهstat()است، اما پیوندهای نمادین را دنبال نمیکند. یک شیءstat_resultرا برمیگرداند.در پلتفرمهایی که از پیوندهای نمادین پشتیبانی نمیکنند، این یک نام مستعار برای
stat()است.از پایتون 3.3، این معادل
os.stat(path, dir_fd=dir_fd, follow_symlinks=False)است.این تابع همچنین میتواند از مسیرهای نسبی به توصیفگرهای پوشه پشتیبانی کند.
همچنین ملاحظه نمائید
تابع
stat().تغییر یافته در نسخهی 3.2: پشتیبانی از پیوندهای نمادین ویندوز 6.0 (ویستا) افزوده شد.
تغییر یافته در نسخهی 3.3: پارامتر dir_fd اضافه شد.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
تغییر یافته در نسخهی 3.8: در ویندوز، اکنون نقاط بازتفسیر (reparse points) را که نشاندهندهی مسیر دیگری هستند (جانشینهای نام یا name surrogates)، از جمله پیوندهای نمادین و اتصالهای پوشه (directory junctions)، باز میکند. سایر انواع نقاط بازتفسیر، همانطور که برای
stat()انجام میشود، توسط سیستمعامل حل میشوند.
- os.mkdir(path, mode=0o777, *, dir_fd=None)¶
پوشهای به نام path با حالت عددی mode ایجاد کنید.
اگر پوشه از قبل وجود داشته باشد،
FileExistsErrorپرتاب میشود. اگر پوشهی والدی در مسیر وجود نداشته باشد،FileNotFoundErrorپرتاب میشود.در برخی سامانهها، mode نادیده گرفته میشود. در مواردی که از آن استفاده میشود، ابتدا مقدار فعلی umask پوشانده میشود. اگر بیتهایی غیر از ۹ بیت آخر (یعنی ۳ رقم آخر نمایش mode در مبنای هشت) تنظیم شده باشند، معنای آنها وابسته به سکو (platform) است. در برخی سکوها، آنها نادیده گرفته میشوند و شما باید برای تنظیم آنها
chmod()را بهصراحت فراخوانی کنید.در ویندوز، mode با مقدار
0o700بهطور ویژه مدیریت میشود تا کنترل دسترسی به پوشهی جدید اعمال شود، بهطوری که فقط کاربر جاری و مدیران دسترسی داشته باشند. سایر مقادیر mode نادیده گرفته میشوند.این تابع همچنین میتواند از مسیرهای نسبی به توصیفگرهای پوشه پشتیبانی کند.
همچنین میتوانید پوشههای موقت ایجاد کنید؛ تابع
tempfile.mkdtemp()در ماژولtempfileرا ببینید.یک رویداد حسابرسی
os.mkdirرا با آرگومانهایpath،modeوdir_fdپرتاب میکند.تغییر یافته در نسخهی 3.3: پارامتر dir_fd اضافه شد.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
تغییر یافته در نسخهی 3.13: ویندوز اکنون یک mode با مقدار
0o700را مدیریت میکند.
- os.makedirs(name, mode=0o777, exist_ok=False)¶
تابع ایجاد پوشه بهصورت بازگشتی. مانند
mkdir()، اما تمام پوشههای سطح میانی مورد نیاز برای دربرگرفتن پوشه نهایی را ایجاد میکند.پارامتر mode برای ایجاد پوشه برگ به
mkdir()ارسال میشود؛ برای آگاهی از چگونگی تفسیر آن، توضیح mkdir() را ببینید. برای تنظیم بیتهای دسترسی پرونده هر یک از پوشههای والد تازهایجادشده میتوانید پیش از فراخوانیmakedirs()، umask را تنظیم کنید. بیتهای دسترسی پرونده پوشههای والد موجود تغییر نمییابند.اگر exist_ok برابر
False(پیشفرض) باشد، در صورتی که پوشه هدف از قبل وجود داشته باشد، یکFileExistsErrorپرتاب میشود.توجه
اگر عناصر مسیری که باید ایجاد شوند شامل
pardirباشند (برای مثال ".." در سیستمهای UNIX)،makedirs()دچار سردرگمی میشود.این تابع مسیرهای UNC را بهدرستی مدیریت میکند.
یک رویداد حسابرسی
os.mkdirرا با آرگومانهایpath،modeوdir_fdپرتاب میکند.تغییر یافته در نسخهی 3.2: پارامتر exist_ok افزوده شد.
تغییر یافته در نسخهی 3.4.1: پیش از پایتون 3.4.1، اگر exist_ok برابر
Trueبود و پوشه وجود داشت،makedirs()همچنان در صورتی خطایی پرتاب میکرد که mode با حالت پوشه موجود مطابقت نداشت. از آنجا که پیادهسازی این رفتار بهصورت ایمن غیرممکن بود، این رفتار در پایتون 3.4.1 حذف شد. به bpo-21082 مراجعه کنید.تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
تغییر یافته در نسخهی 3.7: آرگومان mode دیگر بر بیتهای مجوز فایلِ پوشههای سطح میانی تازه ایجادشده تأثیر نمیگذارد.
- os.mkfifo(path, mode=0o666, *, dir_fd=None)¶
یک FIFO (یک پایپ نامدار) به نام path با حالت عددی mode ایجاد میکند. مقدار فعلی umask ابتدا از حالت نقاب میشود.
این تابع همچنین میتواند از مسیرهای نسبی به توصیفگرهای پوشه پشتیبانی کند.
FIFOها پایپهایی هستند که میتوان مانند پروندههای معمولی به آنها دسترسی داشت. FIFOها تا حذف شدنشان وجود دارند (برای مثال با
os.unlink()). بهطور کلی، FIFOها بهعنوان محل ملاقات بین فرایندهای نوع «کلاینت» و «سرور» استفاده میشوند: سرور FIFO را برای خواندن باز میکند و کلاینت آن را برای نوشتن باز میکند. توجه داشته باشید کهmkfifo()FIFO را باز نمیکند — فقط محل ملاقات را ایجاد میکند.دسترسپذیری: Unix, not WASI.
تغییر یافته در نسخهی 3.3: پارامتر dir_fd اضافه شد.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.mknod(path, mode=0o600, device=0, *, dir_fd=None)¶
یک گره سامانه فایلبندی (پرونده، پرونده ویژه دستگاه یا پایپ نامدار) به نام path ایجاد کنید. mode هم مجوزهای مورد استفاده و هم نوع گرهی که ایجاد میشود را مشخص میکند و بهصورت OR بیتی با یکی از
stat.S_IFREG،stat.S_IFCHR،stat.S_IFBLKوstat.S_IFIFOترکیب میشود (این ثابتها درstatدر دسترس هستند). برایstat.S_IFCHRوstat.S_IFBLK، device پرونده ویژه دستگاهی را که بهتازگی ایجاد شده است تعریف میکند (احتمالاً با استفاده ازos.makedev())، در غیر این صورت نادیده گرفته میشود.این تابع همچنین میتواند از مسیرهای نسبی به توصیفگرهای پوشه پشتیبانی کند.
دسترسپذیری: Unix, not WASI.
تغییر یافته در نسخهی 3.3: پارامتر dir_fd اضافه شد.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.major(device, /)¶
شماره اصلی دستگاه را از یک شماره خام دستگاه استخراج کنید (معمولاً فیلد
st_devیاst_rdevازstat).
- os.minor(device, /)¶
شماره فرعی دستگاه را از یک شماره خام دستگاه استخراج کنید (معمولاً فیلد
st_devیاst_rdevازstat).
- os.makedev(major, minor, /)¶
یک شمارهی دستگاه خام را از شمارههای دستگاه اصلی و فرعی تشکیل دهید.
- os.pathconf(path, name)¶
اطلاعات پیکربندی سیستم مربوط به یک پرونده نامگذاریشده را برمیگرداند. name مقدار پیکربندی برای بازیابی را مشخص میکند؛ ممکن است یک رشته باشد که نام یک مقدار سیستمی تعریفشده است؛ این نامها در تعدادی از استانداردها مشخص شدهاند (POSIX.1، Unix 95، Unix 98 و سایر موارد). برخی سکوها نیز نامهای اضافی تعریف میکنند. نامهای شناختهشده برای سیستمعامل میزبان در دیکشنری
pathconf_namesآمدهاند. برای متغیرهای پیکربندی که در آن نگاشت گنجانده نشدهاند، ارسال یک عدد صحیح برای name نیز پذیرفته میشود.اگر name یک رشته باشد و شناختهشده نباشد،
ValueErrorپرتاب میشود. اگر مقدار خاصی برای name توسط سیستم میزبان پشتیبانی نشود، حتی اگر درpathconf_namesوجود داشته باشد، یکOSErrorباerrno.EINVALبهعنوان شماره خطا پرتاب میشود.این تابع میتواند از مشخص کردن یک توصیفگر پرونده پشتیبانی کند.
دسترسپذیری: Unix.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.pathconf_names¶
دیکشنری که نامهای پذیرفتهشده توسط
pathconf()وfpathconf()را به مقادیر عدد صحیحی که سیستمعامل میزبان برای آن نامها تعریف کرده است نگاشت میکند. میتوان از این دیکشنری برای تعیین مجموعه نامهای شناختهشده برای سیستم استفاده کرد.دسترسپذیری: Unix.
- os.readlink(path, *, dir_fd=None)¶
رشتهای را برمیگرداند که نشاندهندهی مسیری است که پیوند نمادین به آن اشاره میکند. نتیجه ممکن است یک مسیر مطلق یا نسبی باشد؛ اگر نسبی باشد، میتوان آن را با استفاده از
os.path.join(os.path.dirname(path), result)به یک مسیر مطلق تبدیل کرد.اگر path یک شیء رشته باشد (بهطور مستقیم یا غیرمستقیم از طریق یک رابط
PathLike)، نتیجه نیز یک شیء رشته خواهد بود و ممکن است این فراخوانی یک UnicodeDecodeError را پرتاب کند. اگر path یک شیء بایت باشد (بهطور مستقیم یا غیرمستقیم)، نتیجه یک شیء بایت خواهد بود.این تابع همچنین میتواند از مسیرهای نسبی به توصیفگرهای پوشه پشتیبانی کند.
هنگام تلاش برای تعیین مسیری که ممکن است شامل پیوندها باشد، برای مدیریت صحیح بازگشت و تفاوتهای میان سکوها از
realpath()استفاده کنید.دسترسپذیری: Unix, Windows.
تغییر یافته در نسخهی 3.2: پشتیبانی از پیوندهای نمادین ویندوز 6.0 (ویستا) افزوده شد.
تغییر یافته در نسخهی 3.3: پارامتر dir_fd اضافه شد.
تغییر یافته در نسخهی 3.6: در یونیکس، یک شیء شبهمسیر را میپذیرد.
تغییر یافته در نسخهی 3.8: در ویندوز، یک path-like object و یک شیء bytes را میپذیرد.
پشتیبانی از اتصالهای پوشه (directory junctions) افزوده شد و تغییر کرد تا بهجای فیلد اختیاری "print name" که پیشتر برگردانده میشد، مسیر جایگزینی (substitution path) را برگرداند (که معمولاً شامل پیشوند
\\?\است).
- os.remove(path, *, dir_fd=None)¶
پرونده path را حذف میکند. اگر path یک پوشه باشد، یک
OSErrorپرتاب میشود. برای حذف پوشهها ازrmdir()استفاده کنید. اگر پرونده وجود نداشته باشد، یکFileNotFoundErrorپرتاب میشود.این تابع میتواند از مسیرهای نسبت به توصیفگرهای پوشه پشتیبانی کند.
در ویندوز، تلاش برای حذف پروندهای که در حال استفاده است باعث پرتاب یک استثنا میشود؛ در یونیکس، مدخل پوشه حذف میشود اما فضای ذخیرهسازی تخصیصیافته به پرونده تا زمانی که پرونده اصلی دیگر در حال استفاده نباشد، آزاد نمیشود.
این تابع از نظر معنایی با
unlink()یکسان است.یک رویداد حسابرسی
os.removeرا با آرگومانهایpathوdir_fdپرتاب میکند.تغییر یافته در نسخهی 3.3: پارامتر dir_fd اضافه شد.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.removedirs(name)¶
پوشهها را بهصورت بازگشتی حذف میکند. مانند
rmdir()عمل میکند، با این تفاوت که اگر پوشه برگ با موفقیت حذف شود،removedirs()تلاش میکند هر پوشه والد ذکرشده در path را بهترتیب حذف کند تا زمانی که خطایی پرتاب شود (این خطا نادیده گرفته میشود، زیرا معمولاً به این معناست که یک پوشه والد خالی نیست). برای مثال،os.removedirs('foo/bar/baz')ابتدا پوشه'foo/bar/baz'را حذف میکند و سپس اگر'foo/bar'و'foo'خالی باشند، آنها را حذف میکند. اگر پوشه برگ نتواند با موفقیت حذف شود،OSErrorپرتاب میشود.یک رویداد حسابرسی
os.removeرا با آرگومانهایpathوdir_fdپرتاب میکند.تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)¶
نام پرونده یا پوشه src را به dst تغییر دهید. اگر dst وجود داشته باشد، عملیات در تعدادی از موارد با یک زیرکلاس از
OSErrorشکست خواهد خورد:در ویندوز، اگر dst وجود داشته باشد، همیشه
FileExistsErrorپرتاب میشود. اگر src و dst روی سامانه فایلبندیهای متفاوتی باشند، ممکن است این عملیات شکست بخورد. برای پشتیبانی از جابهجایی به سامانه فایلبندیای دیگر، ازshutil.move()استفاده کنید.در یونیکس، اگر src یک پرونده و dst یک پوشه باشد یا برعکس، بهترتیب یک
IsADirectoryErrorیا یکNotADirectoryErrorپرتاب میشود. اگر هر دو پوشه باشند و dst خالی باشد، dst بدون هیچ پیامی جایگزین میشود. اگر dst یک پوشهی غیرخالی باشد، یکOSErrorپرتاب میشود. اگر هر دو پرونده باشند، در صورتی که کاربر اجازه داشته باشد، dst بدون هیچ پیامی جایگزین میشود. اگر src و dst روی سیستمپروندههای متفاوت باشند، این عملیات ممکن است در برخی گونههای یونیکس ناموفق باشد. در صورت موفقیت، تغییر نام یک عملیات اتمی خواهد بود (این یک الزام POSIX است).این تابع میتواند از تعیین src_dir_fd و/یا dst_dir_fd برای فراهم کردن مسیرهای نسبی نسبت به توصیفگرهای پوشه پشتیبانی کند.
اگر میخواهید مقصد بهصورت بینسکویی بازنویسی شود، از
replace()استفاده کنید.یک رویداد حسابرسی
os.renameرا با آرگومانهایsrc،dst،src_dir_fdوdst_dir_fdپرتاب میکند.تغییر یافته در نسخهی 3.3: پارامترهای src_dir_fd و dst_dir_fd اضافه شدند.
تغییر یافته در نسخهی 3.6: یک path-like object را برای src و dst میپذیرد.
- os.renames(old, new)¶
تابع تغییر نام بازگشتی پوشه یا پرونده. مانند
rename()عمل میکند، با این تفاوت که ابتدا تلاش میشود هر پوشهی میانی لازم برای معتبر شدن نام مسیر جدید ایجاد شود. پس از تغییر نام، پوشههای متناظر با سمت راستترین بخشهای مسیر نام قدیمی با استفاده ازremovedirs()حذف میشوند.توجه
این تابع ممکن است با ساختار پوشهای جدید ایجادشده با خطا مواجه شود، اگر دسترسیهای موردنیاز برای حذف پوشه یا پرونده برگ را نداشته باشید.
یک رویداد حسابرسی
os.renameرا با آرگومانهایsrc،dst،src_dir_fdوdst_dir_fdپرتاب میکند.تغییر یافته در نسخهی 3.6: برای old و new یک path-like object را میپذیرد.
- os.replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None)¶
نام پرونده یا پوشهی src را به dst تغییر میدهد. اگر dst یک پوشهی غیرخالی باشد،
OSErrorپرتاب خواهد شد. اگر dst وجود داشته باشد و یک پرونده باشد، در صورتی که کاربر اجازه داشته باشد، بهصورت بیصدا جایگزین میشود. ممکن است این عملیات در صورتی که src و dst بر روی سامانه فایلبندیهای متفاوتی قرار داشته باشند، شکست بخورد. در صورت موفقیت، تغییر نام یک عملیات اتمی خواهد بود (این یک الزام POSIX است).این تابع میتواند از تعیین src_dir_fd و/یا dst_dir_fd برای فراهم کردن مسیرهای نسبی نسبت به توصیفگرهای پوشه پشتیبانی کند.
یک رویداد حسابرسی
os.renameرا با آرگومانهایsrc،dst،src_dir_fdوdst_dir_fdپرتاب میکند.اضافه شده در نسخهی 3.3.
تغییر یافته در نسخهی 3.6: یک path-like object را برای src و dst میپذیرد.
- os.rmdir(path, *, dir_fd=None)¶
پوشهی path را حذف (پاک) میکند. اگر پوشه وجود نداشته باشد یا خالی نباشد، بهترتیب
FileNotFoundErrorیاOSErrorپرتاب میشود. برای حذف درختهای پوشه بهطور کامل، میتوان ازshutil.rmtree()استفاده کرد.این تابع میتواند از مسیرهای نسبت به توصیفگرهای پوشه پشتیبانی کند.
یک رویداد حسابرسی
os.rmdirرا با آرگومانهایpathوdir_fdپرتاب میکند.تغییر یافته در نسخهی 3.3: پارامتر dir_fd اضافه شد.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.scandir(path='.')¶
یک پیمایشگر از اشیای
os.DirEntryمتناظر با ورودیهای موجود در پوشه مشخصشده با path برمیگرداند. ورودیها با ترتیب دلخواه برگردانده میشوند و ورودیهای ویژه'.'و'..'گنجانده نمیشوند. اگر پس از ایجاد پیمایشگر، پروندهای از پوشه حذف یا به آن اضافه شود، اینکه ورودیای برای آن پرونده گنجانده میشود یا نه، نامشخص است.استفاده از
scandir()بهجایlistdir()میتواند عملکرد کدی را که همچنین به اطلاعات نوع پرونده یا ویژگیهای پرونده نیاز دارد، بهطور قابلتوجهی افزایش دهد، زیرا اشیاءos.DirEntryاین اطلاعات را در صورتی در دسترس قرار میدهند که سیستمعامل آن را هنگام پویش یک پوشه فراهم کند. تمام متدهایos.DirEntryممکن است یک فراخوانی سیستمی انجام دهند، اماis_dir()وis_file()معمولاً فقط برای پیوندهای نمادین به یک فراخوانی سیستمی نیاز دارند؛os.DirEntry.stat()در یونیکس همیشه به یک فراخوانی سیستمی نیاز دارد، اما در ویندوز فقط برای پیوندهای نمادین به یک فراخوانی سیستمی نیاز دارد.path میتواند یک شیء شبهمسیر باشد. اگر path از نوع
bytesباشد (چه مستقیماً و چه بهطور غیرمستقیم از طریق رابطPathLike)، نوع ویژگیهایnameوpathدر هرos.DirEntry،bytesخواهد بود؛ در تمام حالتهای دیگر، آنها از نوعstrخواهند بود.این تابع همچنین میتواند از تعیین یک توصیفگر پرونده پشتیبانی کند؛ توصیفگر پرونده باید به یک پوشه اشاره کند.
یک رویداد حسابرسی
os.scandirرا با آرگومانpathپرتاب میکند.پیمایشگر
scandir()از پروتکل context manager پشتیبانی میکند و متد زیر را دارد:- scandir.close()¶
پیمایشگر را ببندید و منابع بهدستآمده را آزاد کنید.
This is called automatically when the iterator is exhausted or garbage collected, or when an error happens during iterating. However it is advisable to call it explicitly or use the
withstatement.اضافه شده در نسخهی 3.6.
مثال زیر استفادهی سادهای از
scandir()را برای نمایش همهی پروندهها (بهجز پوشهها) در path دادهشده نشان میدهد که با'.'شروع نمیشوند. فراخوانیentry.is_file()معمولاً فراخوانی سیستمی اضافی انجام نمیدهد:with os.scandir(path) as it: for entry in it: if not entry.name.startswith('.') and entry.is_file(): print(entry.name)
توجه
در سیستمهای مبتنی بر یونیکس،
scandir()از توابع opendir() و readdir() سیستم استفاده میکند. در ویندوز، از توابع FindFirstFileW و FindNextFileW Win32 استفاده میکند.اضافه شده در نسخهی 3.5.
تغییر یافته در نسخهی 3.6: پشتیبانی از پروتکل context manager و متد
close()افزوده شد. اگر پیمایشگرscandir()نه به پایان رسیده باشد و نه بهصراحت بسته شده باشد، یکResourceWarningدر تخریبکنندهی آن نمایش داده خواهد شد.این تابع یک path-like object را میپذیرد.
تغییر یافته در نسخهی 3.7: پشتیبانی از توصیفگرهای پرونده در یونیکس افزوده شد.
- class os.DirEntry¶
شیءای که توسط
scandir()تولید میشود تا مسیر پرونده و سایر ویژگیهای فایلِ یک ورودیِ پوشه را در دسترس قرار دهد.scandir()تا حد امکان این اطلاعات را بدون انجام فراخوانیهای سیستمی اضافی فراهم میکند. هنگامی که یک فراخوانی سیستمیstat()یاlstat()انجام میشود، شیءos.DirEntryنتیجه را در نهانگاه ذخیره میکند.نمونههای
os.DirEntryبرای ذخیرهسازی در ساختارهای دادهای با طول عمر زیاد در نظر گرفته نشدهاند؛ اگر میدانید فراداده پرونده تغییر کرده است یا زمان زیادی از فراخوانیscandir()سپری شده است، برای دریافت اطلاعات بهروز،os.stat(entry.path)را فراخوانی کنید.از آنجا که متدهای
os.DirEntryمیتوانند فراخوانیهای سیستمعامل انجام دهند، ممکن است همچنینOSErrorرا پرتاب کنند. اگر به کنترل بسیار ریزدانهای بر خطاها نیاز دارید، میتوانید هنگام فراخوانی یکی از متدهایos.DirEntry،OSErrorرا بگیرید و بهشکل مناسب مدیریت کنید.برای آنکه مستقیماً بهعنوان یک شیء شبهمسیر قابلاستفاده باشد،
os.DirEntryرابطPathLikeرا پیادهسازی میکند.اشیای
DirEntryنسبت به نوع مسیر عام هستند (strیاbytes).ویژگیها و متدهای یک نمونه
os.DirEntryبه شرح زیر است:- name¶
نام پرونده پایهی ورودی، نسبت به آرگومان path در
scandir().اگر آرگومان path در
scandir()از نوعbytesباشد، ویژگیnameاز نوعbytesخواهد بود و در غیر این صورت از نوعstrخواهد بود. برای کدگشایی نامپروندههای بایتی ازfsdecode()استفاده کنید.
- path¶
نام مسیر ورودی: معادل
os.path.join(scandir_path, entry.name)است که در آن scandir_path آرگومان path اصلیscandir()است. بهجز نام پرونده، مسیر آرگومان اصلیscandir()را حفظ میکند. اگر آرگومان path برایscandir()نسبی بود، ویژگیpathنیز نسبی است. تغییر پوشه کاری جاری پس از ایجاد پیمایشگرscandir()ممکن است باعث شود که در استفادههای بعدی،pathبهگونهای متفاوت تفسیر شود. در برخی سکوها، ممکن است مسیر ساختهشده معتبر نباشد اگر آرگومان اصلیscandir()برای فهرستگیری قابل استفاده بود، اما برای پیوند با نام ورودی قابل استفاده نبود. اگر آرگومان path برایscandir()یک توصیفگر پرونده بود، ویژگیpathهمان ویژگیnameاست.ویژگی
pathزمانی از نوعbytesخواهد بود که آرگومان path تابعscandir()از نوعbytesباشد و در غیر این صورت، از نوعstrخواهد بود. برای کدگشایی نام پروندههای بایتی ازfsdecode()استفاده کنید.
- inode()¶
شمارهی آینود ورودی را برمیگرداند.
نتیجه در نهانگاه شیء
os.DirEntryذخیره میشود. برای دریافت اطلاعات بهروز، ازos.stat(entry.path, follow_symlinks=False).st_inoاستفاده کنید.در نخستین فراخوانی نهانگاهنشده، در ویندوز به یک فراخوانی سیستمی نیاز است، اما در یونیکس نیاز نیست.
- is_dir(*, follow_symlinks=True)¶
اگر این ورودی یک پوشه یا یک پیوند نمادین باشد که به یک پوشه اشاره میکند،
Trueرا برمیگرداند؛ اگر ورودی هر نوع پرونده دیگری باشد یا به هر نوع پرونده دیگری اشاره کند، یا دیگر وجود نداشته باشد،Falseرا برمیگرداند.اگر follow_symlinks برابر
Falseباشد، تنها در صورتیTrueرا برمیگرداند که این ورودی یک پوشه باشد (بدون دنبال کردن پیوندهای نمادین)؛ اگر ورودی هر نوع پرونده دیگری باشد یا دیگر وجود نداشته باشد،Falseرا برمیگرداند.نتیجه در نهانگاه شیء
os.DirEntryذخیره میشود، با نهانگاهی جداگانه برای follow_symlinksTrueوFalse. برای دریافت اطلاعات بهروز،os.stat()را همراه باstat.S_ISDIR()فراخوانی کنید.در نخستین فراخوانی بدون نهانگاه، در بیشتر موارد نیازی به فراخوانی سیستمی نیست. بهطور مشخص، برای مواردی که پیوند نمادین نیستند، نه ویندوز و نه یونیکس نیازی به فراخوانی سیستمی ندارند، مگر در برخی سیستمپروندههای یونیکس، مانند سیستمپروندههای شبکه، که
dirent.d_type == DT_UNKNOWNرا برمیگردانند. اگر ورودی یک پیوند نمادین باشد، برای دنبال کردن پیوند نمادین به یک فراخوانی سیستمی نیاز خواهد بود، مگر اینکه follow_symlinks برابرFalseباشد.این متد ممکن است
OSErrorرا پرتاب کند، مانندPermissionError، اماFileNotFoundErrorگرفته میشود و پرتاب نمیشود.
- is_file(*, follow_symlinks=True)¶
اگر این ورودی یک پرونده یا یک پیوند نمادین به یک پرونده باشد،
Trueرا برمیگرداند؛ اگر ورودی یک پوشه یا یک ورودی غیرفایل دیگر باشد یا به آن اشاره کند، یا دیگر وجود نداشته باشد،Falseرا برمیگرداند.اگر follow_symlinks برابر
Falseباشد، تنها در صورتیTrueرا برمیگرداند که این ورودی یک پرونده باشد (بدون دنبال کردن پیوندهای نمادین)؛ اگر ورودی یک پوشه یا ورودی دیگری غیر از پرونده باشد، یا دیگر وجود نداشته باشد،Falseرا برمیگرداند.نتیجه در شیء
os.DirEntryدر نهانگاه ذخیره میشود. ذخیره در نهانگاه، فراخوانیهای سیستمی انجامشده و استثناهای پرتابشده مطابقis_dir()هستند.
- is_symlink()¶
اگر این ورودی یک پیوند نمادین باشد (حتی اگر شکسته باشد)،
Trueرا برمیگرداند؛ اگر ورودی به یک پوشه یا هر نوع پروندهای اشاره کند، یا دیگر وجود نداشته باشد،Falseرا برمیگرداند.نتیجه در نهانگاهِ شیء
os.DirEntryذخیره میشود. برای دریافت اطلاعات بهروز،os.path.islink()را فراخوانی کنید.در نخستین فراخوانی بدون نهانگاه، در بیشتر موارد نیازی به فراخوانی سیستمی نیست. بهطور مشخص، نه ویندوز و نه یونیکس به فراخوانی سیستمی نیاز ندارند، مگر در برخی از سامانه فایلبندیهای یونیکسی، مانند سامانه فایلبندیهای شبکه، که
dirent.d_type == DT_UNKNOWNرا برمیگردانند.این متد ممکن است
OSErrorرا پرتاب کند، مانندPermissionError، اماFileNotFoundErrorگرفته میشود و پرتاب نمیشود.
- is_junction()¶
اگر این آیتم یک نقطه اتصال (junction) باشد (حتی اگر شکسته باشد)،
Trueبرمیگرداند؛ اگر آیتم به یک پوشه معمولی، هر نوع پرونده، یک پیوند نمادین اشاره کند یا دیگر وجود نداشته باشد،Falseبرمیگرداند.نتیجه در نهانگاه شیء
os.DirEntryذخیره میشود. برای دریافت اطلاعات بهروز،os.path.isjunction()را فراخوانی کنید.اضافه شده در نسخهی 3.12.
- stat(*, follow_symlinks=True)¶
یک شیء
stat_resultبرای این ورودی برمیگرداند. این متد بهطور پیشفرض پیوندهای نمادین را دنبال میکند؛ برای گرفتن وضعیت (stat) یک پیوند نمادین، آرگومانfollow_symlinks=Falseرا اضافه کنید.در یونیکس، این متد همیشه به یک فراخوانی سیستمی نیاز دارد. در ویندوز، تنها در صورتی به یک فراخوانی سیستمی نیاز دارد که follow_symlinks برابر
Trueباشد و ورودی یک نقطهی تحلیل مجدد (reparse point) باشد (برای مثال، یک پیوند نمادین یا یک اتصالِ پوشه (directory junction)).در ویندوز، ویژگیهای
st_ino،st_devوst_nlinkازstat_resultهمیشه روی صفر تنظیم میشوند. برای دریافت این ویژگیها،os.stat()را فراخوانی کنید.نتیجه در شیء
os.DirEntryدر نهانگاه ذخیره میشود، با نهانگاههای جداگانه برای follow_symlinksTrueوFalse. برای دریافت اطلاعات بهروز،os.stat()را فراخوانی کنید.
توجه داشته باشید که تناظر خوبی بین چندین ویژگی و متدِ
os.DirEntryوpathlib.Pathوجود دارد. بهویژه، ویژگیnameمعنای یکسانی دارد و متدهایis_dir()،is_file()،is_symlink()،is_junction()وstat()نیز معنای یکسانی دارند.اضافه شده در نسخهی 3.5.
تغییر یافته در نسخهی 3.6: پشتیبانی از رابط
PathLikeافزوده شد. پشتیبانی از مسیرهایbytesدر ویندوز افزوده شد.تغییر یافته در نسخهی 3.12: ویژگی
st_ctimeدر نتیجهی stat در ویندوز منسوخ شده است. زمان ایجاد پرونده بهدرستی بهعنوانst_birthtimeدر دسترس است و در آینده ممکن استst_ctimeتغییر کند تا صفر یا زمان تغییر فراداده را، در صورت موجود بودن، برگرداند.
- os.stat(path, *, dir_fd=None, follow_symlinks=True)¶
وضعیت یک پرونده یا توصیفگر پرونده را دریافت میکند. معادل فراخوانی سیستمی
stat()روی مسیر دادهشده را انجام میدهد. path میتواند بهصورت یک رشته یا بایت -- بهطور مستقیم یا غیرمستقیم از طریق رابطPathLike-- یا بهعنوان یک توصیفگر پرونده باز مشخص شود. یک شیءstat_resultبرمیگرداند.این تابع بهطور معمول پیوندهای نمادین را دنبال میکند؛ برای گرفتن وضعیت (stat) یک پیوند نمادین، آرگومان
follow_symlinks=Falseرا اضافه کنید یا ازlstat()استفاده کنید.این تابع میتواند از تعیین یک توصیفگر پرونده و عدم دنبالکردن پیوندهای نمادین پشتیبانی کند.
در ویندوز، ارسال
follow_symlinks=Falseدنبال کردن همهی نقاط بازتفسیر جانشین نام (name-surrogate reparse points) را غیرفعال میکند؛ این نقاط شامل پیوندهای نمادین و اتصالهای پوشه (directory junctions) میشوند. سایر انواع نقاط بازتفسیر (reparse points) که شبیه پیوند نیستند یا سیستمعامل قادر به دنبال کردن آنها نیست، مستقیماً باز خواهند شد. هنگام دنبال کردن زنجیرهای از چند پیوند، این موضوع ممکن است باعث شود پیوند اصلی بهجای موردی که پیوند نیست اما مانع پیمایش کامل شده است، بازگردانده شود. برای بهدست آوردن نتایج stat برای مسیر نهایی در این حالت، از تابعos.path.realpath()استفاده کنید تا نام مسیر را تا حد ممکن حل کند و سپسlstat()را روی نتیجه فراخوانی کنید. این موضوع دربارهی پیوندهای نمادین آویزان (dangling symlinks) یا نقاط اتصال (junction points) صدق نمیکند؛ این موارد باعث ایجاد استثناهای معمول خواهند شد.مثال:
>>> import os >>> statinfo = os.stat('somefile.txt') >>> statinfo os.stat_result(st_mode=33188, st_ino=7876932, st_dev=234881026, st_nlink=1, st_uid=501, st_gid=501, st_size=264, st_atime=1297230295, st_mtime=1297230027, st_ctime=1297230027) >>> statinfo.st_size 264
تغییر یافته در نسخهی 3.3: پارامترهای dir_fd و follow_symlinks افزوده شدند تا بهجای مسیر، یک توصیفگر پرونده را مشخص کنند.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
تغییر یافته در نسخهی 3.8: در ویندوز، اکنون تمام نقاط reparse (reparse points) که سیستمعامل قادر به حل آنها است، دنبال میشوند، و ارسال
follow_symlinks=Falseدنبال کردن تمام نقاط reparse جانشین نام (name surrogate reparse points) را غیرفعال میکند. اگر سیستمعامل به نقطهی reparse برسد که نتواند آن را دنبال کند، stat اکنون بهجای پرتاب خطا، اطلاعات مسیر اصلی را برمیگرداند، گوییfollow_symlinks=Falseتعیین شده بود.
- class os.stat_result¶
شیءای که ویژگیهای آن تقریباً معادل اعضای ساختار
statاست. این شیء برای نتیجهیos.stat()،os.fstat()وos.lstat()استفاده میشود.ویژگیها:
- st_mode¶
حالت پرونده: نوع پرونده و بیتهای حالت پرونده (مجوزها).
- st_ino¶
وابسته به پلتفرم است، اما اگر غیرصفر باشد، پرونده را برای یک مقدار مشخص از
st_devبهطور یکتا شناسایی میکند. معمولاً:شمارهی آینود در یونیکس،
اندیس پرونده در ویندوز
- st_dev¶
شناسهی دستگاهی که این پرونده روی آن قرار دارد.
- st_nlink¶
تعداد پیوندهای سخت.
- st_uid¶
شناسهی کاربری مالک پرونده.
- st_gid¶
شناسهی گروه مالک پرونده.
- st_size¶
اندازهی پرونده به بایت، در صورتی که یک پرونده معمولی یا پیوند نمادین باشد. اندازهی یک پیوند نمادین برابر با طول نام مسیر موجود در آن است، بدون یک بایت نول (null byte) پایاندهنده.
برچسبهای زمانی:
- st_atime¶
زمان آخرین دسترسی، بیانشده بر حسب ثانیه.
- st_mtime¶
زمان آخرین تغییر محتوا، بیانشده بر حسب ثانیه.
- st_ctime¶
زمان آخرین تغییر فراداده، بیانشده بر حسب ثانیه.
تغییر یافته در نسخهی 3.12:
st_ctimeدر ویندوز منسوخ شده است. برای زمان ایجاد پرونده ازst_birthtimeاستفاده کنید. در آینده،st_ctimeشامل زمان آخرین تغییر فراداده خواهد بود، مانند سایر سکوهای دیگر.
- st_atime_ns¶
زمان آخرین دسترسی بر حسب نانوثانیه بهصورت عدد صحیح بیان میشود.
اضافه شده در نسخهی 3.3.
- st_mtime_ns¶
زمان آخرین تغییر محتوا، بیانشده بر حسب نانوثانیه بهصورت عدد صحیح.
اضافه شده در نسخهی 3.3.
- st_ctime_ns¶
زمان آخرین تغییر فراداده، بیانشده بر حسب نانوثانیه بهصورت عدد صحیح.
اضافه شده در نسخهی 3.3.
تغییر یافته در نسخهی 3.12:
st_ctime_nsدر ویندوز منسوخ شده است. برای زمان ایجاد پرونده ازst_birthtime_nsاستفاده کنید. در آینده،st_ctimeحاوی زمان آخرین تغییر فراداده خواهد بود، همانگونه که برای سایر پلتفرمها است.
- st_birthtime¶
زمان ایجاد پرونده که بر حسب ثانیه بیان میشود. این ویژگی همیشه در دسترس نیست و ممکن است
AttributeErrorرا پرتاب کند.تغییر یافته در نسخهی 3.12:
st_birthtimeاکنون در ویندوز در دسترس است.
- st_birthtime_ns¶
زمان ایجاد پرونده، بیانشده بر حسب نانوثانیه بهصورت عدد صحیح. این ویژگی همیشه در دسترس نیست و ممکن است
AttributeErrorرا پرتاب کند.اضافه شده در نسخهی 3.12.
توجه
معنای دقیق و دقت ویژگیهای
st_atime،st_mtime،st_ctimeوst_birthtimeبه سیستمعامل و سامانه فایلبندی بستگی دارد. برای مثال، در سیستمهای ویندوزی که از سیستمپروندههای FAT32 استفاده میکنند،st_mtimeدقت ۲ ثانیهای دارد وst_atimeتنها دقت ۱ روزه دارد. برای جزئیات، مستندات سیستمعامل خود را ببینید.بهطور مشابه، اگرچه
st_atime_ns،st_mtime_ns،st_ctime_nsوst_birthtime_nsهمیشه بر حسب نانوثانیه بیان میشوند، بسیاری از سیستمها دقت نانوثانیهای فراهم نمیکنند. در سیستمهایی که دقت نانوثانیهای فراهم میکنند، شیء ممیز شناوری که برای ذخیرهst_atime،st_mtime،st_ctimeوst_birthtimeاستفاده میشود نمیتواند تمام آن را حفظ کند، و بنابراین کمی نادقیق خواهد بود. اگر به برچسبهای زمانی دقیق نیاز دارید، باید همیشه ازst_atime_ns،st_mtime_ns،st_ctime_nsوst_birthtime_nsاستفاده کنید.در برخی سیستمهای یونیکسی (مانند لینوکس)، ممکن است ویژگیهای زیر نیز در دسترس باشند:
- st_blocks¶
تعداد بلوکهای ۵۱۲ بایتی تخصیصیافته برای پرونده. این مقدار ممکن است وقتی پرونده حفرههایی دارد، کوچکتر از
st_size/512 باشد.
- st_blksize¶
اندازه بلوک «ترجیحی» برای ورودی/خروجی کارآمد سامانه فایلبندی. نوشتن در یک پرونده با تکههای کوچکتر ممکن است منجر به خواندن-اصلاح-بازنویسی (read-modify-rewrite) ناکارآمد شود.
- st_rdev¶
نوع دستگاه، در صورتی که آینود یک دستگاه باشد.
- st_flags¶
پرچمهای تعریفشده توسط کاربر برای پرونده.
در سایر سیستمهای یونیکسی (مانند FreeBSD)، ممکن است ویژگیهای زیر در دسترس باشند (اما ممکن است تنها زمانی پر شده باشند که root سعی کند از آنها استفاده کند):
- st_gen¶
شمارهی نسل پرونده.
در Solaris و مشتقات آن، ممکن است ویژگیهای زیر نیز در دسترس باشند:
- st_fstype¶
رشتهای که بهطور یکتا نوع سامانه فایلبندیِ حاوی پرونده را شناسایی میکند.
در سیستمهای macOS، ممکن است ویژگیهای زیر نیز در دسترس باشند:
- st_rsize¶
اندازه واقعی پرونده.
- st_creator¶
ایجادکنندهی پرونده.
- st_type¶
نوع پرونده.
در سیستمهای ویندوزی، ویژگیهای زیر نیز در دسترس هستند:
- st_file_attributes¶
ویژگیهای پرونده در ویندوز: عضو
dwFileAttributesاز ساختارBY_HANDLE_FILE_INFORMATIONکه توسطGetFileInformationByHandle()بازگردانده میشود. ثابتهایFILE_ATTRIBUTE_* <stat.FILE_ATTRIBUTE_ARCHIVE>را در ماژولstatببینید.اضافه شده در نسخهی 3.5.
- st_reparse_tag¶
هنگامی که
FILE_ATTRIBUTE_REPARSE_POINTدرst_file_attributesتنظیمشده باشد، این فیلد شامل برچسبی است که نوع نقطهی reparse (reparse point) را مشخص میکند. به ثابتهایIO_REPARSE_TAG_*در ماژولstatمراجعه کنید.
ماژول استاندارد
statتوابع و ثابتهایی را تعریف میکند که برای استخراج اطلاعات از یک ساختارstatمفید هستند. (در ویندوز، برخی آیتمها با مقادیر ساختگی پر شدهاند.)برای سازگاری با نسخههای پیشین، یک نمونه
stat_resultنیز بهصورت یک تاپل از حداقل ۱۰ عدد صحیح قابل دسترسی است که مهمترین (و قابل حمل) اعضای ساختارstatرا به ترتیبst_mode،st_ino،st_dev،st_nlink،st_uid،st_gid،st_size،st_atime،st_mtime،st_ctimeارائه میدهد. ممکن است برخی پیادهسازیها آیتمهای بیشتری را به انتهای آن اضافه کنند. برای سازگاری با نسخههای قدیمیتر پایتون، دسترسی بهstat_resultبهصورت یک تاپل همیشه اعداد صحیح را برمیگرداند.تغییر یافته در نسخهی 3.5: ویندوز اکنون در صورت موجود بودن، اندیس پرونده را بهعنوان
st_inoبرمیگرداند.تغییر یافته در نسخهی 3.7: عضو
st_fstypeبرای Solaris و مشتقات آن افزوده شد.تغییر یافته در نسخهی 3.8: عضو
st_reparse_tagدر ویندوز اضافه شد.تغییر یافته در نسخهی 3.8: در ویندوز، عضو
st_modeاکنون پروندههای ویژه را حسب مورد بهعنوانS_IFCHR،S_IFIFOیاS_IFBLKشناسایی میکند.تغییر یافته در نسخهی 3.12: در ویندوز،
st_ctimeمنسوخ شده است. در نهایت، این ویژگی برای سازگاری با سایر سکوها، شامل زمان آخرین تغییر فراداده خواهد شد، اما در حال حاضر همچنان شامل زمان ایجاد است. برای زمان ایجاد ازst_birthtimeاستفاده کنید.در ویندوز،
st_inoاکنون ممکن است بسته به سامانه فایلبندی تا ۱۲۸ بیت باشد. پیشتر این مقدار از ۶۴ بیت بیشتر نمیشد و شناسههای پرونده بزرگتر بهصورت دلخواه فشرده میشدند.در ویندوز،
st_rdevدیگر مقداری برنمیگرداند. پیشتر، همان مقدارst_devرا شامل میشد که نادرست بود.عضو
st_birthtimeدر ویندوز افزوده شد.
- os.statvfs(path)¶
یک فراخوانی سیستمی statvfs(3) روی مسیر دادهشده انجام میدهد. مقدار بازگشتی یک
statvfs_resultاست که ویژگیهای آن، سامانه فایلبندی در مسیر دادهشده را توصیف میکنند و با اعضای ساختارstatvfsمطابقت دارند.این تابع میتواند از مشخص کردن یک توصیفگر پرونده پشتیبانی کند.
دسترسپذیری: Unix.
تغییر یافته در نسخهی 3.3: پشتیبانی از مشخص کردن path بهعنوان یک توصیفگر پرونده باز (open file descriptor) افزوده شد.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- class os.statvfs_result¶
آمار سامانه فایلبندی بازگرداندهشده توسط
os.statvfs()وos.fstatvfs(). برای جزئیات بیشتر، statvfs(3) را ببینید.- f_bsize¶
اندازه بلوک.
- f_frsize¶
اندازهی قطعه.
- f_bfree¶
تعداد بلوکهای آزاد.
- f_bavail¶
تعداد بلوکهای آزاد برای کاربران بدون امتیاز.
- f_files¶
تعداد ورودیهای پرونده، آینودها (inodes)، که سامانه فایلبندی میتواند شامل شود.
- f_ffree¶
تعداد مدخلهای آزاد پرونده.
- f_favail¶
تعداد ورودیهای آزاد پرونده برای کاربران فاقد امتیاز.
- f_flag¶
نقاب بیتی از پرچمهای سوار کردن (mount). پرچمهای زیر تعریف شدهاند:
ST_RDONLY،ST_NOSUID،ST_NODEV،ST_NOEXEC،ST_SYNCHRONOUS،ST_MANDLOCK،ST_WRITE،ST_APPEND،ST_IMMUTABLE،ST_NOATIME،ST_NODIRATIMEوST_RELATIME.
- f_namemax¶
حداکثر طول نام پرونده در سامانه فایلبندی. ممکن است محدودیتهای خاص سیستمعامل، مانند Windows MAX_PATH و مواردی که در pathname(7) لینوکس توضیح داده شدهاند، وجود داشته باشند.
- f_fsid¶
شناسهی سامانه فایلبندی.
اضافه شده در نسخهی 3.7.
پرچمهای زیر در statvfs_result.f_flag استفاده میشوند.
- os.ST_RDONLY¶
سامانه فایلبندی فقطخواندنی.
اضافه شده در نسخهی 3.2.
- os.ST_NOSUID¶
بیتهای setuid/setgid غیرفعال هستند یا پشتیبانی نمیشوند.
اضافه شده در نسخهی 3.2.
- os.ST_NODEV¶
دسترسی به پروندههای ویژهی دستگاه را ممنوع میکند.
دسترسپذیری: Linux.
اضافه شده در نسخهی 3.4.
- os.ST_NOEXEC¶
جلوگیری از اجرای برنامه.
دسترسپذیری: Linux.
اضافه شده در نسخهی 3.4.
- os.ST_SYNCHRONOUS¶
نوشتنها بلافاصله همگامسازی میشوند.
دسترسپذیری: Linux.
اضافه شده در نسخهی 3.4.
- os.ST_MANDLOCK¶
اجازهی قفلهای اجباری روی یک سامانه فایلبندی.
دسترسپذیری: Linux.
اضافه شده در نسخهی 3.4.
- os.ST_WRITE¶
نوشتن روی پرونده/پوشه/پیوند نمادین.
دسترسپذیری: Linux.
اضافه شده در نسخهی 3.4.
- os.ST_APPEND¶
پرونده فقط الحاقی.
دسترسپذیری: Linux.
اضافه شده در نسخهی 3.4.
- os.ST_IMMUTABLE¶
پرونده تغییرناپذیر.
دسترسپذیری: Linux.
اضافه شده در نسخهی 3.4.
- os.ST_NOATIME¶
زمانهای دسترسی را بهروزرسانی نکنید.
دسترسپذیری: Linux.
اضافه شده در نسخهی 3.4.
- os.ST_NODIRATIME¶
زمانهای دسترسی پوشه را بهروزرسانی نکنید.
دسترسپذیری: Linux.
اضافه شده در نسخهی 3.4.
- os.ST_RELATIME¶
بهروزرسانی atime نسبت به mtime/ctime.
دسترسپذیری: Linux.
اضافه شده در نسخهی 3.4.
- os.supports_dir_fd¶
یک شیء
setکه نشان میدهد کدامیک از توابع ماژولosیک توصیفگر پرونده باز را برای پارامتر dir_fd خود میپذیرند. پلتفرمهای مختلف امکانات متفاوتی ارائه میدهند، و قابلیت زیربناییای که پایتون برای پیادهسازی پارامتر dir_fd از آن استفاده میکند، در تمام پلتفرمهایی که پایتون از آنها پشتیبانی میکند، در دسترس نیست. برای حفظ سازگاری، توابعی که ممکن است از dir_fd پشتیبانی کنند، همیشه اجازهی مشخص کردن این پارامتر را میدهند، اما در صورت استفاده از این قابلیت هنگامی که بهصورت محلی در دسترس نیست، یک استثنا پرتاب میکنند. (مشخص کردنNoneبرای dir_fd همیشه در تمام پلتفرمها پشتیبانی میشود.)برای بررسی اینکه آیا یک تابع خاص برای پارامتر dir_fd خود یک توصیفگر پرونده باز را میپذیرد، از عملگر
inرویsupports_dir_fdاستفاده کنید. بهعنوان مثال، اگرos.stat()توصیفگرهای پرونده باز را برای dir_fd در پلتفرم محلی بپذیرد، این عبارت بهصورتTrueارزیابی میشود:os.stat in os.supports_dir_fd
در حال حاضر پارامترهای dir_fd فقط روی پلتفرمهای یونیکسی کار میکنند؛ هیچکدام از آنها در ویندوز کار نمیکنند.
اضافه شده در نسخهی 3.3.
- os.supports_effective_ids¶
یک شیء
setکه نشان میدهد آیاos.access()در سکوی محلی اجازه میدهد که مقدارTrueبرای پارامتر effective_ids آن تعیین شود. (تعیینFalseبرای effective_ids همیشه در تمام سکوها پشتیبانی میشود.) اگر سکوی محلی آن را پشتیبانی کند، این مجموعه شاملos.access()خواهد بود؛ در غیر این صورت خالی خواهد بود.این عبارت در صورتی به
Trueارزیابی میشود کهos.access()روی پلتفرم محلی ازeffective_ids=Trueپشتیبانی کند:os.access in os.supports_effective_ids
در حال حاضر effective_ids فقط در پلتفرمهای یونیکسی پشتیبانی میشود؛ روی ویندوز کار نمیکند.
اضافه شده در نسخهی 3.3.
- os.supports_fd¶
یک شیء
setکه نشان میدهد کدام توابع در ماژولosاجازه میدهند پارامتر path خود را بهصورت یک توصیفگر پرونده باز در سکوی محلی مشخص کنید. سکوهای مختلف امکانات متفاوتی ارائه میدهند، و قابلیت زیربنایی که پایتون برای پذیرش توصیفگرهای پرونده باز بهعنوان آرگومانهای path استفاده میکند، در همه سکوهای پشتیبانیشده توسط پایتون در دسترس نیست.برای تعیین اینکه آیا یک تابع خاص اجازه میدهد یک توصیفگر پرونده باز برای پارامتر path آن مشخص شود، از عملگر
inبر رویsupports_fdاستفاده کنید. بهعنوان مثال، اگرos.chdir()توصیفگرهای پرونده باز را برای path در سکوی محلی شما بپذیرد، این عبارت به مقدارTrueارزیابی میشود:os.chdir in os.supports_fd
اضافه شده در نسخهی 3.3.
- os.supports_follow_symlinks¶
یک شیء
setکه نشان میدهد کدام توابع در ماژولosدر پلتفرم محلی،Falseرا برای پارامتر follow_symlinks خود میپذیرند. پلتفرمهای مختلف، قابلیتهای متفاوتی ارائه میدهند و قابلیت زیربناییای که پایتون برای پیادهسازی follow_symlinks از آن استفاده میکند، در همه پلتفرمهای مورد پشتیبانی پایتون در دسترس نیست. برای حفظ یکپارچگی، توابعی که ممکن است از follow_symlinks پشتیبانی کنند، همیشه اجازهی تعیین این پارامتر را میدهند، اما در صورت استفاده از این قابلیت در زمانی که بهصورت محلی در دسترس نیست، استثنا پرتاب میکنند. (تعیینTrueبرای follow_symlinks همیشه در همه پلتفرمها پشتیبانی میشود.)برای بررسی اینکه آیا یک تابع خاص برای پارامتر follow_symlinks خود مقدار
Falseرا میپذیرد، از عملگرinرویsupports_follow_symlinksاستفاده کنید. بهعنوان مثال، اگر هنگام فراخوانیos.stat()روی پلتفرم محلی بتوانیدfollow_symlinks=Falseرا مشخص کنید، این عبارت بهTrueارزیابی میشود:os.stat in os.supports_follow_symlinks
اضافه شده در نسخهی 3.3.
- os.symlink(src, dst, target_is_directory=False, *, dir_fd=None)¶
یک پیوند نمادین با نام dst ایجاد کنید که به src اشاره میکند.
پارامتر src به هدف پیوند (پرونده یا پوشهای که به آن پیوند داده میشود) اشاره دارد، و dst نام پیوندی است که ایجاد میشود.
در ویندوز، یک پیوند نمادین نشاندهنده یک پرونده یا یک پوشه است و بهصورت پویا به هدف تغییر شکل نمیدهد. اگر هدف موجود باشد، نوع پیوند نمادین متناسب با آن ایجاد میشود. در غیر این صورت، اگر target_is_directory برابر
Trueباشد، پیوند نمادین بهعنوان یک پوشه ایجاد میشود؛ در غیر این صورت پیوند نمادین به پرونده (حالت پیشفرض) ایجاد میشود. در پلتفرمهای غیر ویندوزی، target_is_directory نادیده گرفته میشود.این تابع میتواند از مسیرهای نسبت به توصیفگرهای پوشه پشتیبانی کند.
توجه
در نسخههای جدیدتر Windows 10، حسابهای فاقد امتیاز در صورت فعال بودن حالت توسعهدهنده (Developer Mode) میتوانند پیوندهای نمادینایجاد کنند. هنگامی که حالت توسعهدهنده در دسترس/فعال نباشد، به امتیاز SeCreateSymbolicLinkPrivilege نیاز است، یا فرایند باید بهعنوان مدیر اجرا شود.
هنگامی که تابع توسط یک کاربر بدون امتیاز فراخوانی شود،
OSErrorپرتاب میشود.یک رویداد حسابرسی
os.symlinkرا با آرگومانهایsrc،dstوdir_fdپرتاب میکند.دسترسپذیری: Unix, Windows.
این تابع در WASI محدود است، برای اطلاعات بیشتر سکوهای WebAssembly را ببینید.
تغییر یافته در نسخهی 3.2: پشتیبانی از پیوندهای نمادین ویندوز 6.0 (ویستا) افزوده شد.
تغییر یافته در نسخهی 3.3: پارامتر dir_fd افزوده شد و اکنون target_is_directory در سکوهای غیرویندوزی مجاز است.
تغییر یافته در نسخهی 3.6: یک path-like object را برای src و dst میپذیرد.
تغییر یافته در نسخهی 3.8: پشتیبانی از پیوندهای نمادین بدون ارتقاء (unelevated symlinks) در ویندوز با حالت توسعهدهنده افزوده شد.
- os.sync()¶
نوشتن همهچیز روی دیسک را اجباری میکند.
دسترسپذیری: Unix.
اضافه شده در نسخهی 3.3.
- os.truncate(path, length)¶
پرونده متناظر با path را کوتاه کنید تا اندازهی آن حداکثر length بایت باشد.
این تابع میتواند از مشخص کردن یک توصیفگر پرونده پشتیبانی کند.
یک رویداد حسابرسی
os.truncateرا با آرگومانهایpathوlengthپرتاب میکند.دسترسپذیری: Unix, Windows.
اضافه شده در نسخهی 3.3.
تغییر یافته در نسخهی 3.5: پشتیبانی از ویندوز اضافه شد
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.unlink(path, *, dir_fd=None)¶
پرونده path را حذف (پاک کردن) میکند. این تابع از نظر معنایی با
remove()یکسان است؛ نامunlinkنام سنتی آن در یونیکس است. لطفاً برای اطلاعات بیشتر، مستنداتremove()را ببینید.یک رویداد حسابرسی
os.removeرا با آرگومانهایpathوdir_fdپرتاب میکند.تغییر یافته در نسخهی 3.3: پارامتر dir_fd اضافه شد.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.utime(path, times=None, *, [ns, ]dir_fd=None, follow_symlinks=True)¶
زمانهای دسترسی و اصلاح پرونده مشخصشده با path را تنظیم میکند.
utime()دو پارامتر اختیاری میپذیرد، times و ns. اینها زمانهایی را که برای path تنظیم میشوند مشخص میکنند و به صورت زیر استفاده میشوند:اگر ns تعیینشده باشد، باید یک تاپل دوتایی به شکل
(atime_ns, mtime_ns)باشد که هر عضو آن یک عدد صحیح بیانگر نانوثانیه باشد.اگر times برابر
Noneنباشد، باید یک تاپل دوتایی به شکل(atime, mtime)باشد که هر عضو آن یک int یا float بیانکنندهی ثانیهها است.اگر times برابر
Noneباشد و ns مشخص نشده باشد، این معادل مشخص کردنns=(atime_ns, mtime_ns)است که در آن هر دو زمان، زمان فعلی هستند.
مشخص کردن تاپلها برای هر دو times و ns خطا است.
توجه داشته باشید که زمانهای دقیقی که در اینجا تنظیم میکنید ممکن است توسط یک فراخوانی بعدی
stat()برگردانده نشوند، بسته به میزان دقتی که سیستمعامل شما زمانهای دسترسی و تغییر را ثبت میکند؛stat()را ببینید. بهترین راه برای حفظ زمانهای دقیق، استفاده از فیلدهای st_atime_ns و st_mtime_ns از شیء نتیجهیos.stat()بههمراه پارامتر ns برایutime()است.این تابع میتواند از مشخص کردن یک توصیفگر پرونده، مسیرهای نسبی به توصیفگرهای پوشه و دنبالنکردن پیوندهای نمادین پشتیبانی کند.
یک رویداد حسابرسی
os.utimeرا با آرگومانهایpath،times،nsوdir_fdپرتاب میکند.تغییر یافته در نسخهی 3.3: پشتیبانی برای مشخص کردن path بهعنوان یک توصیفگر پرونده باز، و پارامترهای dir_fd، follow_symlinks و ns افزوده شد.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.walk(top, topdown=True, onerror=None, followlinks=False)¶
نام پروندههای یک درخت پوشه را با پیمایش درخت از بالا به پایین یا از پایین به بالا تولید میکند. برای هر پوشه در درختی که ریشه آن پوشه top است (از جمله خود top)، یک ۳-تایی
(dirpath, dirnames, filenames)برمیگرداند.dirpath یک رشته است، مسیر پوشه. dirnames فهرستی از نامهای زیرپوشههای درون dirpath است (شامل پیوندهای نمادینبه پوشهها، و بهجز
'.'و'..'). filenames فهرستی از نامهای پروندههای غیرپوشهای درون dirpath است. توجه داشته باشید که نامهای درون فهرستها شامل هیچیک از کامپوننتهای مسیر نیستند. برای بهدست آوردن مسیر کامل (که با top شروع میشود) برای یک پرونده یا پوشه در dirpath، ازos.path.join(dirpath, name)استفاده کنید. این که فهرستها مرتب باشند یا نه، به سامانه فایلبندی بستگی دارد. اگر در حین تولید فهرستها، پروندهای از پوشه dirpath حذف یا به آن اضافه شود، این که نام آن پرونده در فهرستها گنجانده شود یا نه، نامشخص است.اگر آرگومان اختیاری topdown برابر
Trueباشد یا تعیین نشده باشد، سهتایی مربوط به یک پوشه پیش از سهتاییهای هر یک از زیرپوشههای آن تولید میشود (پوشهها بهصورت بالا به پایین تولید میشوند). اگر topdown برابرFalseباشد، سهتایی مربوط به یک پوشه پس از سهتاییهای تمام زیرپوشههای آن تولید میشود (پوشهها بهصورت پایین به بالا تولید میشوند). صرفنظر از مقدار topdown، فهرست زیرپوشهها پیش از تولید تاپلهای مربوط به پوشه و زیرپوشههای آن بازیابی میشود.هنگامی که topdown برابر
Trueباشد، فراخواننده میتواند فهرست dirnames را بهصورت درجا تغییر دهد (شاید با استفاده ازdelیا انتساب اسلایسی)، وwalk()فقط بهصورت بازگشتی وارد زیرپوشههایی خواهد شد که نامشان در dirnames باقی مانده است؛ این میتواند برای هرس جستجو، اعمال ترتیب مشخص برای بازدید، یا حتی اطلاع دادن بهwalk()درباره پوشههایی استفاده شود که فراخواننده پیش از آنکهwalk()را دوباره از سر بگیرد، ایجاد یا تغییر نام میدهد. تغییر dirnames هنگامی که topdown برابرFalseباشد، تأثیری بر رفتار پیمایش ندارد، زیرا در حالت پایینبهبالا، پوشههای موجود در dirnames پیش از آنکه خود dirpath تولید شود، تولید میشوند.بهطور پیشفرض، خطاهای حاصل از فراخوانی
scandir()نادیده گرفته میشوند. اگر آرگومان اختیاری onerror مشخص شده باشد، باید یک تابع باشد؛ این تابع با یک آرگومان فراخوانی میشود که یک نمونه ازOSErrorاست. این تابع میتواند خطا را گزارش دهد تا پیمایش ادامه یابد، یا استثنا را پرتاب کند تا پیمایش متوقف شود. توجه داشته باشید که نام پرونده بهعنوان ویژگیfilenameشیء استثنا در دسترس است.بهطور پیشفرض،
walk()وارد پیوندهای نمادینی که به پوشهها اشاره دارند نمیشود. برای بازدید از پوشههایی که پیوندهای نمادین به آنها اشاره دارند، در سیستمهایی که از آنها پشتیبانی میکنند، followlinks را رویTrueتنظیم کنید.توجه
توجه داشته باشید که تنظیم followlinks روی
Trueمیتواند منجر به بازگشت بیپایان شود، اگر پیوندی به پوشهی والد خود اشاره کند.walk()پوشههایی را که پیشتر بازدید کرده است پیگیری نمیکند.توجه
اگر یک مسیر نسبی را ارسال میکنید، پوشه کاری جاری را بین ازسرگیریهای
walk()تغییر ندهید.walk()هرگز پوشه جاری را تغییر نمیدهد و فرض میکند که فراخوانندهاش نیز آن را تغییر نمیدهد.این مثال تعداد بایتهای اشغالشده توسط پروندههای غیرپوشهای را در هر پوشه زیر پوشهی شروع نمایش میدهد، بهجز این که در هیچ زیرپوشهی
__pycache__جستجو نمیکند:import os from os.path import join, getsize for root, dirs, files in os.walk('python/Lib/xml'): print(root, "consumes", end=" ") print(sum(getsize(join(root, name)) for name in files), end=" ") print("bytes in", len(files), "non-directory files") if '__pycache__' in dirs: dirs.remove('__pycache__') # don't visit __pycache__ directories
در مثال بعدی (پیادهسازی سادهای از
shutil.rmtree())، پیمایش درخت از پایین به بالا ضروری است؛rmdir()اجازهی حذف یک پوشه پیش از خالی شدن آن را نمیدهد:# Delete everything reachable from the directory named in "top", # assuming there are no symbolic links. # CAUTION: This is dangerous! For example, if top == '/', it # could delete all your disk files. import os for root, dirs, files in os.walk(top, topdown=False): for name in files: os.remove(os.path.join(root, name)) for name in dirs: os.rmdir(os.path.join(root, name)) os.rmdir(top)
یک رویداد حسابرسی
os.walkرا با آرگومانهایtop،topdown،onerrorوfollowlinksپرتاب میکند.تغییر یافته در نسخهی 3.5: این تابع اکنون به جای
os.listdir()،os.scandir()را فراخوانی میکند و با کاهش تعداد فراخوانیهایos.stat()، سریعتر میشود.تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.fwalk(top='.', topdown=True, onerror=None, *, follow_symlinks=False, dir_fd=None)¶
این دقیقاً مانند
walk()رفتار میکند، با این تفاوت که یک ۴-تایی(dirpath, dirnames, filenames, dirfd)تولید میکند و ازdir_fdپشتیبانی میکند.dirpath، dirnames و filenames با خروجی
walk()یکسان هستند، و dirfd یک توصیفگر پرونده است که به پوشهی dirpath اشاره میکند.این تابع همیشه از مسیرهای نسبی نسبت به توصیفگرهای پوشه و عدم دنبالکردن پیوندهای نمادین پشتیبانی میکند. با این حال توجه داشته باشید که برخلاف سایر توابع، مقدار پیشفرض follow_symlinks در
fwalk()برابرFalseاست.توجه
از آنجا که
fwalk()توصیفگرهای پرونده را برمیگرداند، آنها فقط تا گام بعدی تکرار معتبر هستند؛ بنابراین اگر میخواهید آنها را برای مدت طولانیتری نگه دارید، باید آنها را تکثیر کنید (برای مثال باdup()).این مثال تعداد بایتهای اشغالشده توسط پروندههای غیرپوشهای را در هر پوشه زیر پوشهی شروع نمایش میدهد، بهجز این که در هیچ زیرپوشهی
__pycache__جستجو نمیکند:import os for root, dirs, files, rootfd in os.fwalk('python/Lib/xml'): print(root, "consumes", end=" ") print(sum([os.stat(name, dir_fd=rootfd).st_size for name in files]), end=" ") print("bytes in", len(files), "non-directory files") if '__pycache__' in dirs: dirs.remove('__pycache__') # don't visit __pycache__ directories
در مثال بعدی، پیمایش درخت از پایین به بالا ضروری است:
rmdir()اجازهی حذف یک پوشه را پیش از خالی بودن آن نمیدهد:# Delete everything reachable from the directory named in "top", # assuming there are no symbolic links. # CAUTION: This is dangerous! For example, if top == '/', it # could delete all your disk files. import os for root, dirs, files, rootfd in os.fwalk(top, topdown=False): for name in files: os.unlink(name, dir_fd=rootfd) for name in dirs: os.rmdir(name, dir_fd=rootfd)
رویداد حسابرسی
os.fwalkرا با آرگومانهایtop،topdown،onerror،follow_symlinksوdir_fdپرتاب میکند.دسترسپذیری: Unix.
اضافه شده در نسخهی 3.3.
تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
تغییر یافته در نسخهی 3.7: پشتیبانی از مسیرهای
bytesافزوده شد.
- os.memfd_create(name[, flags=os.MFD_CLOEXEC])¶
یک پرونده ناشناس ایجاد میکند و یک توصیفگر پرونده که به آن اشاره دارد برمیگرداند. flags باید یکی از ثابتهای
os.MFD_*در دسترس روی سیستم باشد (یا ترکیبی از آنها با عملگر بیتی OR). بهطور پیشفرض، توصیفگر پرونده جدید غیرقابل ارثبردن است.نام ارائهشده در name بهعنوان نام پرونده استفاده میشود و بهعنوان هدف پیوند نمادین متناظر در پوشه
/proc/self/fd/نمایش داده میشود. نام نمایشدادهشده همیشه دارای پیشوندmemfd:است و فقط برای اهداف اشکالزدایی به کار میرود. نامها بر رفتار توصیفگر پرونده تأثیری ندارند، و بنابراین چندین پرونده میتوانند بدون هیچگونه عوارض جانبی نام یکسانی داشته باشند.دسترسپذیری: Linux >= 3.17 with glibc >= 2.27.
اضافه شده در نسخهی 3.8.
- os.MFD_CLOEXEC¶
- os.MFD_ALLOW_SEALING¶
- os.MFD_HUGETLB¶
- os.MFD_HUGE_SHIFT¶
- os.MFD_HUGE_MASK¶
- os.MFD_HUGE_64KB¶
- os.MFD_HUGE_512KB¶
- os.MFD_HUGE_1MB¶
- os.MFD_HUGE_2MB¶
- os.MFD_HUGE_8MB¶
- os.MFD_HUGE_16MB¶
- os.MFD_HUGE_32MB¶
- os.MFD_HUGE_256MB¶
- os.MFD_HUGE_512MB¶
- os.MFD_HUGE_1GB¶
- os.MFD_HUGE_2GB¶
- os.MFD_HUGE_16GB¶
این پرچمها را میتوان به
memfd_create()ارسال کرد.دسترسپذیری: Linux >= 3.17 with glibc >= 2.27
پرچمهای
MFD_HUGE*تنها از لینوکس 4.14 در دسترس هستند.اضافه شده در نسخهی 3.8.
- os.eventfd(initval[, flags=os.EFD_CLOEXEC])¶
یک توصیفگر پرونده رویداد ایجاد میکند و آن را بازمیگرداند. این توصیفگر پرونده از
read()وwrite()خام با اندازهی بافر ۸،select()،poll()و موارد مشابه پشتیبانی میکند. برای اطلاعات بیشتر، صفحهی man eventfd(2) را ببینید. بهطور پیشفرض، توصیفگر پرونده جدید غیرقابل ارثبردن است.initval مقدار اولیه شمارنده رویداد است. مقدار اولیه باید یک عدد صحیح بدون علامت ۳۲ بیتی باشد. لطفاً توجه داشته باشید که مقدار اولیه به یک عدد صحیح بدون علامت ۳۲ بیتی محدود است، اگرچه شمارنده رویداد یک عدد صحیح بدون علامت ۶۴ بیتی با بیشینه مقدار 264-2 است.
flags را میتوان از
EFD_CLOEXEC،EFD_NONBLOCKوEFD_SEMAPHOREساخت.اگر
EFD_SEMAPHOREتعیین شده باشد و شمارنده رویداد غیرصفر باشد،eventfd_read()مقدار ۱ را برمیگرداند و شمارنده را یک واحد کاهش میدهد.اگر
EFD_SEMAPHOREمشخص نشده باشد و شمارنده رویداد غیرصفر باشد،eventfd_read()مقدار فعلی شمارنده رویداد را برمیگرداند و شمارنده را به صفر بازنشانی میکند.اگر شمارنده رویداد صفر باشد و
EFD_NONBLOCKمشخص نشده باشد،eventfd_read()مسدود میشود.eventfd_write()شمارنده رویداد را افزایش میدهد. نوشتن زمانی مسدود میشود که عملیات نوشتن بخواهد شمارنده را به مقداری بزرگتر از 264-2 افزایش دهد.مثال:
import os # semaphore with start value '1' fd = os.eventfd(1, os.EFD_SEMAPHORE | os.EFD_CLOEXEC) try: # acquire semaphore v = os.eventfd_read(fd) try: do_work() finally: # release semaphore os.eventfd_write(fd, v) finally: os.close(fd)
دسترسپذیری: Linux >= 2.6.27 with glibc >= 2.8
اضافه شده در نسخهی 3.10.
- os.eventfd_read(fd)¶
مقدار را از یک توصیفگر پرونده
eventfd()میخواند و یک عدد صحیح بدون علامت ۶۴ بیتی برمیگرداند. این تابع بررسی نمیکند که fd یکeventfd()باشد.دسترسپذیری: Linux >= 2.6.27
اضافه شده در نسخهی 3.10.
- os.eventfd_write(fd, value)¶
افزودن مقدار به یک توصیفگر پرونده
eventfd(). value باید یک عدد صحیح بدون علامت ۶۴ بیتی باشد. این تابع بررسی نمیکند که fd یکeventfd()باشد.دسترسپذیری: Linux >= 2.6.27
اضافه شده در نسخهی 3.10.
- os.EFD_CLOEXEC¶
تنظیم پرچم close-on-exec برای توصیفگر پرونده جدید
eventfd().دسترسپذیری: Linux >= 2.6.27
اضافه شده در نسخهی 3.10.
- os.EFD_NONBLOCK¶
تنظیم پرچم وضعیت
O_NONBLOCKبرای توصیفگر پرونده جدیدeventfd().دسترسپذیری: Linux >= 2.6.27
اضافه شده در نسخهی 3.10.
- os.EFD_SEMAPHORE¶
معنایی شبیه به سمافور برای خواندن از یک توصیفگر پرونده
eventfd()فراهم میکند. در هر خواندن، شمارندهی داخلی یک واحد کاهش مییابد.دسترسپذیری: Linux >= 2.6.30
اضافه شده در نسخهی 3.10.
توصیفگرهای پرونده زمانسنج¶
اضافه شده در نسخهی 3.13.
این توابع پشتیبانی از API توصیفگر پرونده تایمر (timer file descriptor) لینوکس را فراهم میکنند. طبیعتاً، همهی آنها فقط در لینوکس در دسترس هستند.
- os.timerfd_create(clockid, /, *, flags=0)¶
ایجاد و بازگرداندن یک توصیفگر پرونده زمانسنج (timerfd).
توصیفگر پرونده برگرداندهشده توسط
timerfd_create()از موارد زیر پشتیبانی میکند:میتوان متد
read()توصیفگر پرونده را با اندازه بافر ۸ فراخوانی کرد. اگر زمانسنج پیشتر یک یا چند بار منقضی شده باشد،read()تعداد دفعات انقضا را با ترتیب بایتهای میزبان برمیگرداند، که میتوان آن را باint.from_bytes(x, byteorder=sys.byteorder)به یکintتبدیل کرد.میتوان از
select()وpoll()برای منتظر ماندن تا منقضی شدن زمانسنج و قابل خواندن شدن توصیفگر پرونده استفاده کرد.clockid باید یک شناسه ساعت (clock ID) معتبر باشد، همانطور که در ماژول
timeتعریف شده است:time.CLOCK_BOOTTIME(از لینوکس 3.15 برای timerfd_create)
If clockid is
time.CLOCK_REALTIME, a settable system-wide real-time clock is used. If the system clock is changed, the timer setting needs to be updated. To cancel the timer when the system clock is changed, seeTFD_TIMER_CANCEL_ON_SET.اگر clockid برابر
time.CLOCK_MONOTONICباشد، از ساعتی غیرقابلتنظیم استفاده میشود که بهصورت یکنواخت افزایش مییابد. حتی اگر ساعت سیستم تغییر کند، تنظیم زمانسنج تحت تأثیر قرار نمیگیرد.If clockid is
time.CLOCK_BOOTTIME, it is the same astime.CLOCK_MONOTONICexcept it includes any time that the system is suspended.میتوان رفتار توصیفگر پرونده را با تعیین یک مقدار flags تغییر داد. میتوان از هر یک از متغیرهای زیر استفاده کرد و آنها را با OR بیتی (عملگر
|) ترکیب کرد:If
TFD_NONBLOCKis not set as a flag,read()blocks until the timer expires. If it is set as a flag,read()doesn't block, but if there hasn't been an expiration since the last call to read,read()raisesOSErrorwitherrnoset toerrno.EAGAIN.TFD_CLOEXECهمواره بهصورت خودکار توسط پایتون تنظیم میشود.توصیفگر پرونده باید هنگامی که دیگر نیازی به آن نیست، با
os.close()بسته شود، در غیر این صورت توصیفگر پرونده نشت خواهد کرد.همچنین ملاحظه نمائید
صفحهی man مربوط به timerfd_create(2).
دسترسپذیری: Linux >= 2.6.27 with glibc >= 2.8
اضافه شده در نسخهی 3.13.
- os.timerfd_settime(fd, /, *, flags=0, initial=0.0, interval=0.0)¶
زمانسنج داخلی یک توصیفگر پرونده زمانسنج را تغییر میدهد. این تابع همان زمانسنج بازهای
timerfd_settime_ns()را مدیریت میکند.fd باید یک توصیفگر پرونده زمانسنج معتبر باشد.
رفتار زمانسنج را میتوان با تعیین یک مقدار flags تغییر داد. میتوان از هر یک از متغیرهای زیر استفاده کرد و آنها را با OR بیتی (عملگر
|) ترکیب کرد:The timer is disabled by setting initial to zero (
0). If initial is greater than zero, the timer is enabled. If initial is less than zero, it raises anOSErrorexception witherrnoset toerrno.EINVAL.By default the timer will fire when initial seconds have elapsed.
با این حال، اگر پرچم
TFD_TIMER_ABSTIMEتنظیم شده باشد، تایمر زمانی فعال میشود که ساعت تایمر (که با clockid درtimerfd_create()تنظیم میشود) به initial ثانیه برسد.The timer's interval is set by the interval
float. If interval is zero, the timer only fires once, on the initial expiration. If interval is greater than zero, the timer fires every time interval seconds have elapsed since the previous expiration. If interval is less than zero, it raisesOSErrorwitherrnoset toerrno.EINVAL.If the
TFD_TIMER_CANCEL_ON_SETflag is set along withTFD_TIMER_ABSTIMEand the clock for this timer istime.CLOCK_REALTIME, the timer is marked as cancelable if the real-time clock is changed discontinuously. Reading the descriptor is aborted with the errorerrno.ECANCELED.لینوکس ساعت سیستم را بهصورت UTC مدیریت میکند. انتقال ساعت تابستانی تنها با تغییر آفست زمان (time offset) انجام میشود و باعث تغییر ناپیوسته ساعت سیستم نمیشود.
رویدادهای زیر موجب تغییر ناپیوسته ساعت سیستم خواهند شد:
settimeofdayclock_settimeتاریخ و زمان سیستم را با دستور
dateتنظیم کنید
یک تاپل دو آیتمی شامل (
next_expiration,interval) را از وضعیت پیشین تایمر، پیش از اجرای این تابع برمیگرداند.همچنین ملاحظه نمائید
timerfd_create(2)، timerfd_settime(2)، settimeofday(2)، clock_settime(2) و date(1).
دسترسپذیری: Linux >= 2.6.27 with glibc >= 2.8
اضافه شده در نسخهی 3.13.
- os.timerfd_settime_ns(fd, /, *, flags=0, initial=0, interval=0)¶
مشابه
timerfd_settime()، اما از زمان بهصورت نانوثانیه استفاده میکند. این تابع همان زمانسنج بازهایtimerfd_settime()را به کار میگیرد.دسترسپذیری: Linux >= 2.6.27 with glibc >= 2.8
اضافه شده در نسخهی 3.13.
- os.timerfd_gettime(fd, /)¶
یک تاپل ۲ آیتمی از مقادیر float (
next_expiration،interval) برمیگرداند.next_expirationزمان نسبی تا فعال شدن بعدی زمانسنج را نشان میدهد، صرفنظر از اینکه پرچمTFD_TIMER_ABSTIMEتنظیم شده باشد.intervalنشاندهندهی فاصلهی زمانی تایمر است. اگر صفر باشد، تایمر تنها یکبار، پس از سپری شدنnext_expirationثانیه، فعال میشود.همچنین ملاحظه نمائید
دسترسپذیری: Linux >= 2.6.27 with glibc >= 2.8
اضافه شده در نسخهی 3.13.
- os.timerfd_gettime_ns(fd, /)¶
مشابه
timerfd_gettime()، اما زمان را بهصورت نانوثانیه برمیگرداند.دسترسپذیری: Linux >= 2.6.27 with glibc >= 2.8
اضافه شده در نسخهی 3.13.
- os.TFD_NONBLOCK¶
پرچمی برای تابع
timerfd_create()، که پرچم وضعیتO_NONBLOCKرا برای توصیفگر پرونده زمانسنج جدید تنظیم میکند. اگرTFD_NONBLOCKبهعنوان پرچم تنظیم نشده باشد،read()مسدود میشود.دسترسپذیری: Linux >= 2.6.27 with glibc >= 2.8
اضافه شده در نسخهی 3.13.
- os.TFD_CLOEXEC¶
پرچمی برای تابع
timerfd_create()؛ اگرTFD_CLOEXECبهعنوان پرچم تنظیم شود، پرچم close-on-exec را برای توصیفگر پرونده جدید تنظیم میکند.دسترسپذیری: Linux >= 2.6.27 with glibc >= 2.8
اضافه شده در نسخهی 3.13.
- os.TFD_TIMER_ABSTIME¶
پرچمی برای توابع
timerfd_settime()وtimerfd_settime_ns(). اگر این پرچم تنظیمشده باشد، initial بهعنوان یک مقدار مطلق بر اساس ساعت تایمر تفسیر میشود (بهصورت ثانیهها یا نانوثانیههای UTC از مبدأ یونیکس).دسترسپذیری: Linux >= 2.6.27 with glibc >= 2.8
اضافه شده در نسخهی 3.13.
- os.TFD_TIMER_CANCEL_ON_SET¶
پرچمی برای توابع
timerfd_settime()وtimerfd_settime_ns()بههمراهTFD_TIMER_ABSTIME. این زمانسنج هنگامی لغو میشود که زمان ساعت زیربنایی بهصورت ناپیوسته تغییر کند.دسترسپذیری: Linux >= 2.6.27 with glibc >= 2.8
اضافه شده در نسخهی 3.13.
ویژگیهای گسترشیافته لینوکس¶
اضافه شده در نسخهی 3.3.
این توابع همگی تنها در لینوکس در دسترس هستند.
- os.getxattr(path, attribute, *, follow_symlinks=True)¶
مقدار ویژگی گسترشیافتهی سامانه فایلبندی attribute را برای path برمیگرداند. attribute میتواند bytes یا str باشد (بهطور مستقیم یا غیرمستقیم از طریق رابط
PathLike). اگر str باشد، با کدگذاری سامانه فایلبندی کدگذاری میشود.این تابع میتواند از تعیین یک توصیفگر پرونده و عدم دنبالکردن پیوندهای نمادین پشتیبانی کند.
یک رویداد حسابرسی
os.getxattrرا با آرگومانهایpathوattributeپرتاب میکند.تغییر یافته در نسخهی 3.6: یک path-like object را برای path و attribute میپذیرد.
- os.listxattr(path=None, *, follow_symlinks=True)¶
فهرستی از ویژگیهای توسعهیافتهی سامانه فایلبندی برای path برمیگرداند. ویژگیهای موجود در فهرست بهصورت رشتههایی نمایش داده میشوند که با کدگذاری سامانه فایلبندی کدگشایی شدهاند. اگر path برابر
Noneباشد،listxattr()پوشه جاری را بررسی خواهد کرد.این تابع میتواند از تعیین یک توصیفگر پرونده و عدم دنبالکردن پیوندهای نمادین پشتیبانی کند.
یک رویداد حسابرسی
os.listxattrرا با آرگومانpathپرتاب میکند.تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os.removexattr(path, attribute, *, follow_symlinks=True)¶
ویژگی توسعهیافتهی سامانه فایلبندی attribute را از path حذف میکند. attribute باید از نوع bytes یا str باشد (مستقیماً یا بهطور غیرمستقیم از طریق رابط
PathLike). اگر یک رشته باشد، با filesystem encoding and error handler کدگذاری میشود.این تابع میتواند از تعیین یک توصیفگر پرونده و عدم دنبالکردن پیوندهای نمادین پشتیبانی کند.
یک رویداد حسابرسی
os.removexattrرا با آرگومانهایpathوattributeپرتاب میکند.تغییر یافته در نسخهی 3.6: یک path-like object را برای path و attribute میپذیرد.
- os.setxattr(path, attribute, value, flags=0, *, follow_symlinks=True)¶
ویژگی گستردهی سامانه فایلبندیای attribute را برای path به value تنظیم کنید. attribute باید از نوع bytes یا str بدون هیچ نویسهی NUL نهفتهای باشد (چه مستقیم و چه غیرمستقیم از طریق رابط
PathLike). اگر از نوع str باشد، با کدگذاری و هندلر خطای سامانه فایلبندیای کدگذاری میشود. flags میتواندXATTR_REPLACEیاXATTR_CREATEباشد. اگرXATTR_REPLACEداده شده باشد و ویژگی وجود نداشته باشد،ENODATAپرتاب خواهد شد. اگرXATTR_CREATEداده شده باشد و ویژگی از قبل وجود داشته باشد، ویژگی ایجاد نخواهد شد وEEXISTSپرتاب خواهد شد.این تابع میتواند از تعیین یک توصیفگر پرونده و عدم دنبالکردن پیوندهای نمادین پشتیبانی کند.
توجه
یک اشکال در نسخههای کمتر از 2.6.39 هسته لینوکس باعث میشد که آرگومان flags در برخی سامانه فایلبندیها نادیده گرفته شود.
یک رویداد حسابرسی
os.setxattrرا با آرگومانهایpath،attribute،valueوflagsپرتاب میکند.تغییر یافته در نسخهی 3.6: یک path-like object را برای path و attribute میپذیرد.
- os.XATTR_SIZE_MAX¶
حداکثر اندازه ممکن برای مقدار یک ویژگی گسترشیافته. در حال حاضر، این مقدار در لینوکس ۶۴ KiB است.
- os.XATTR_CREATE¶
این یک مقدار ممکن برای آرگومان flags در
setxattr()است. این نشان میدهد که عملیات باید یک ویژگی ایجاد کند.
- os.XATTR_REPLACE¶
این یک مقدار ممکن برای آرگومان flags در
setxattr()است. این نشان میدهد که عملیات باید یک ویژگی موجود را جایگزین کند.
مدیریت فرایند¶
میتوان از این توابع برای ایجاد و مدیریت فرآیندها استفاده کرد.
توابع گوناگون exec* فهرستی از آرگومانها را برای برنامه جدیدی که در فرایند بارگذاری میشود دریافت میکنند. در هر مورد، نخستین آرگومان از این آرگومانها بهعنوان نام خود برنامه به برنامه جدید ارسال میشود، نه بهعنوان آرگومانی که کاربر ممکن است در خط فرمان وارد کرده باشد. برای برنامهنویس C، این همان argv[0] است که به main() یک برنامه ارسال میشود. برای مثال، os.execv('/bin/echo', ['foo', 'bar']) تنها bar را در خروجی استاندارد چاپ میکند؛ به نظر میرسد که foo چشمپوشی شده است.
- os.abort()¶
یک سیگنال
SIGABRTبه فرایند جاری ارسال میکند. در یونیکس، رفتار پیشفرض تولید یک برونریزی هسته است؛ در ویندوز، فرایند بلافاصله کد خروجی3را برمیگرداند. توجه داشته باشید که فراخوانی این تابع، هندلر سیگنال پایتونی را که برایSIGABRTباsignal.signal()ثبت شده است، فراخوانی نخواهد کرد.
- os.add_dll_directory(path)¶
مسیری به مسیر جستجوی DLL اضافه کنید.
این مسیر جستوجو هنگام حل وابستگیهای ماژولهای توسعهای ایمپورتشده (خود ماژول از طریق
sys.pathیافت میشود)، و همچنین توسطctypesاستفاده میشود.پوشه را با فراخوانی close() روی شیء برگرداندهشده یا استفاده از آن در یک دستور
withحذف کنید.برای اطلاعات بیشتر دربارهی چگونگی بارگذاری DLLها، مستندات مایکروسافت را ببینید.
یک رویداد حسابرسی
os.add_dll_directoryرا با آرگومانpathپرتاب میکند.دسترسپذیری: Windows.
اضافه شده در نسخهی 3.8: نسخههای پیشین CPython، DLLها را با استفاده از رفتار پیشفرض فرایند جاری پیدا میکردند. این موضوع به ناسازگاریهایی منجر میشد؛ از جمله اینکه تنها گاهی
PATHیا پوشهی کاری جاری جستجو میشد و توابع سیستمعامل مانندAddDllDirectoryتأثیری نداشتند.در 3.8، دو روش اصلی بارگذاری DLLها اکنون بهصراحت رفتار در سطح فرایند را نادیده میگیرند تا سازگاری تضمین شود. برای کسب اطلاعات در مورد بهروزرسانی کتابخانهها، یادداشتهای انتقال را ببینید.
- os.execl(path, arg0, arg1, ...)¶
- os.execle(path, arg0, arg1, ..., env)¶
- os.execlp(file, arg0, arg1, ...)¶
- os.execlpe(file, arg0, arg1, ..., env)¶
- os.execv(path, args)¶
- os.execve(path, args, env)¶
- os.execvp(file, args)¶
- os.execvpe(file, args, env)¶
این توابع همگی یک برنامه جدید را اجرا میکنند و جایگزین فرایند جاری میشوند؛ آنها بازگشت نمیکنند. در یونیکس، پرونده اجرایی جدید در فرایند جاری بارگذاری میشود و همان شناسه فرایند فراخواننده را خواهد داشت. خطاها بهصورت استثناهای
OSErrorگزارش میشوند.فرایند جاری بلافاصله جایگزین میشود. اشیای پرونده باز و توصیفگرها تخلیه نمیشوند، بنابراین اگر ممکن است دادهای در بافر این پروندههای باز وجود داشته باشد، باید پیش از فراخوانی تابع
exec*، آنها را با استفاده ازflush()یاos.fsync()تخلیه کنید.گونههای «l» و «v» از توابع
exec*در چگونگی ارسال آرگومانهای خط فرمان تفاوت دارند. گونههای «l» شاید آسانترین گزینه برای کار کردن باشند اگر تعداد پارامترها هنگام نوشتن کد ثابت باشد؛ پارامترهای جداگانه صرفاً به پارامترهای اضافی برای توابعexecl*()تبدیل میشوند. گونههای «v» زمانی مناسب هستند که تعداد پارامترها متغیر باشد و آرگومانها در قالب یک فهرست یا تاپل بهعنوان پارامتر args ارسال شوند. در هر دو حالت، آرگومانهای ارسالی به فرایند فرزند باید با نام فرمانی که اجرا میشود شروع شوند، اما این امر الزامی نیست.گونههایی که شامل یک «p» نزدیک به انتها هستند (
execlp()،execlpe()،execvp()وexecvpe())، از متغیر محیطیPATHبرای یافتن file برنامه استفاده میکنند. هنگامی که محیط جایگزین میشود (با استفاده از یکی از گونههایexec*e، که در پاراگراف بعدی توضیح داده شده است)، از محیط جدید بهعنوان منبع متغیرPATHاستفاده میشود. سایر گونهها،execl()،execle()،execv()وexecve()، از متغیرPATHبرای یافتن پرونده اجرایی استفاده نخواهند کرد؛ path باید شامل یک مسیر مطلق یا نسبی مناسب باشد. مسیرهای نسبی باید دستکم یک اسلش داشته باشند، حتی در ویندوز، زیرا نامهای ساده حل نخواهند شد.برای
execle()،execlpe()،execve()وexecvpe()(توجه داشته باشید که همه اینها به «e» ختم میشوند)، پارامتر env باید یک نگاشت باشد که برای تعریف متغیرهای محیطی فرایند جدید استفاده میشود (این متغیرها به جای محیط فرایند جاری استفاده میشوند)؛ توابعexecl()،execlp()،execv()وexecvp()همگی باعث میشوند فرایند جدید محیط فرایند جاری را به ارث ببرد.برای
execve()در برخی سکوها، همچنین میتوان path را بهعنوان یک توصیفگر پرونده باز مشخص کرد. ممکن است این قابلیت در سکو شما پشتیبانی نشود؛ میتوانید با استفاده ازos.supports_fdبررسی کنید که آیا این قابلیت در دسترس است یا خیر. اگر در دسترس نباشد، استفاده از آن باعث پرتاب استثنایNotImplementedErrorمیشود.یک رویداد حسابرسی
os.execرا با آرگومانهایpath،argsوenvپرتاب میکند.دسترسپذیری: Unix, Windows, not WASI, not Android, not iOS.
تغییر یافته در نسخهی 3.3: پشتیبانی از مشخص کردن path بهعنوان یک توصیفگر پرونده باز برای
execve()افزوده شد.تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
- os._exit(n)¶
فرایند را با وضعیت n خارج میکند، بدون فراخوانی هندلرهای پاکسازی، تخلیه بافرهای stdio و غیره.
توجه
راه استاندارد برای خروج
sys.exit(n)است. معمولاً_exit()باید فقط در فرایند فرزند پس ازfork()استفاده شود.
کدهای خروجی زیر تعریف شدهاند و میتوان آنها را با _exit() به کار برد، اگرچه استفاده از آنها الزامی نیست. این کدها معمولاً برای برنامههای سیستمی نوشتهشده با پایتون استفاده میشوند، مانند برنامهی تحویل فرمان خارجی یک سرور پست.
توجه
برخی از این موارد ممکن است در همهی پلتفرمهای یونیکس در دسترس نباشند، زیرا تفاوتهایی وجود دارد. این ثابتها در مواردی تعریف شدهاند که پلتفرم زیرین آنها را تعریف کرده باشد.
- os.EX_OK¶
کد خروجی که نشان میدهد هیچ خطایی رخ نداده است. ممکن است از مقدار تعریفشده
EXIT_SUCCESSدر برخی پلتفرمها گرفته شود. معمولاً دارای مقدار صفر است.دسترسپذیری: Unix, Windows.
- os.EX_USAGE¶
کد خروجیای که نشان میدهد فرمان بهصورت نادرست استفاده شده است، مانند زمانی که تعداد نادرستی آرگومان داده شود.
دسترسپذیری: Unix, not WASI.
- os.EX_DATAERR¶
کد خروجیای که به معنای نادرست بودن دادههای ورودی است.
دسترسپذیری: Unix, not WASI.
- os.EX_NOINPUT¶
کد خروجیای که به معنای وجود نداشتن پرونده ورودی یا قابل خواندن نبودن آن است.
دسترسپذیری: Unix, not WASI.
- os.EX_NOUSER¶
کد خروجی که به معنای وجود نداشتن کاربر مشخصشده است.
دسترسپذیری: Unix, not WASI.
- os.EX_NOHOST¶
کد خروجی که به معنای وجود نداشتن میزبان مشخصشده است.
دسترسپذیری: Unix, not WASI.
- os.EX_UNAVAILABLE¶
کد خروجی که نشان میدهد یک سرویس مورد نیاز در دسترس نیست.
دسترسپذیری: Unix, not WASI.
- os.EX_SOFTWARE¶
کد خروجی که نشان میدهد یک خطای نرمافزاری داخلی شناسایی شده است.
دسترسپذیری: Unix, not WASI.
- os.EX_OSERR¶
کد خروجیای که به معنای شناسایی یک خطای سیستمعامل است، مانند ناتوانی در fork یا ایجاد pipe.
دسترسپذیری: Unix, not WASI.
- os.EX_OSFILE¶
کد خروجی که نشان میدهد یک سامانه فایلبندیای وجود نداشته است، نمیتوانسته باز شود، یا خطای دیگری داشته است.
دسترسپذیری: Unix, not WASI.
- os.EX_CANTCREAT¶
کد خروجی که به معنای ایجاد نشدن پرونده خروجی مشخصشده توسط کاربر است.
دسترسپذیری: Unix, not WASI.
- os.EX_IOERR¶
کد خروجی که نشان میدهد خطایی هنگام انجام ورودی/خروجی روی پروندهای رخ داده است.
دسترسپذیری: Unix, not WASI.
- os.EX_TEMPFAIL¶
کد خروجیای که به معنای وقوع یک شکست موقت است. این نشاندهندهی موردی است که ممکن است واقعاً یک خطا نباشد، مانند اتصال شبکهای که در حین یک عملیات قابل تلاش مجدد برقرار نشده است.
دسترسپذیری: Unix, not WASI.
- os.EX_PROTOCOL¶
کد خروجی که نشان میدهد تبادل پروتکل غیرمجاز، نامعتبر یا نامفهوم بوده است.
دسترسپذیری: Unix, not WASI.
- os.EX_NOPERM¶
کد خروجی که به معنای ناکافی بودن دسترسیها برای انجام عملیات است (اما برای مشکلات سامانه فایلبندی در نظر گرفته نشده است).
دسترسپذیری: Unix, not WASI.
- os.EX_CONFIG¶
کد خروجی که نشان میدهد نوعی خطای پیکربندی رخ داده است.
دسترسپذیری: Unix, not WASI.
- os.EX_NOTFOUND¶
کد خروجی که معنایی شبیه به «ورودیای یافت نشد» دارد.
دسترسپذیری: Unix, not WASI.
- os.fork()¶
یک فرایند فرزند را fork میکند . در فرایند فرزند
0و در فرایند والد شناسه فرایند فرزند را برمیگرداند. اگر خطایی رخ دهد،OSErrorپرتاب میشود.توجه داشته باشید که برخی سکوها، از جمله FreeBSD <= 6.3 و Cygwin، هنگام استفاده از
fork()از یک نخ، مشکلات شناختهشدهای دارند.یک رویداد حسابرسی
os.forkرا بدون آرگومان پرتاب میکند.هشدار
اگر از سوکتهای TLS در برنامهای که
fork()را فراخوانی میکند استفاده میکنید، هشدار موجود در مستنداتsslرا ببینید.هشدار
در macOS، استفاده از این تابع هنگامی که با استفاده از APIهای سیستمی سطح بالاتر ترکیب شود، ناامن است، و این شامل استفاده از
urllib.requestنیز میشود.تغییر یافته در نسخهی 3.8: فراخوانی
fork()در یک زیرمفسر دیگر پشتیبانی نمیشود (استثنایRuntimeErrorپرتاب میشود).تغییر یافته در نسخهی 3.12: اگر پایتون بتواند تشخیص دهد که فرایند شما چندین نخ دارد،
os.fork()اکنون یکDeprecationWarningپرتاب میکند.ما تصمیم گرفتیم این موضوع را، در صورت قابلتشخیص بودن، بهصورت یک هشدار نشان دهیم تا بهتر توسعهدهندگان را از یک مشکل طراحی آگاه کنیم؛ مشکلی که سکوی POSIX بهطور خاص آن را بهعنوان پشتیبانینشده ذکر کرده است. حتی در کدی که به نظر میرسد کار میکند، ترکیب استفاده از نخها با
os.fork()در سکوهای POSIX هرگز ایمن نبوده است. خود رانتایم CPython همیشه فراخوانیهای API انجام داده است که در صورت وجود نخها در فرایند والد، برای استفاده در فرایند فرزند ایمن نیستند (مانندmallocوfree).کاربران macOS یا کاربران پیادهسازیهای دیگری از libc یا malloc غیر از آنهایی که تاکنون معمولاً در glibc یافت شدهاند، از جمله کسانی هستند که از قبل بیشتر احتمال میرود هنگام اجرای چنین کدی با بنبست مواجه شوند.
برای جزئیات فنی دربارهی اینکه چرا این مشکل دیرینهی سازگاری پلتفرم را برای توسعهدهندگان آشکار میکنیم، این بحث دربارهی ناسازگاری fork با نخها را ببینید.
دسترسپذیری: POSIX, not WASI, not Android, not iOS.
- os.forkpty()¶
یک فرایند فرزند را با استفاده از یک شبهپایانه (pseudo-terminal) جدید بهعنوان پایانه کنترلکننده فرزند fork میکند. یک جفت
(pid, fd)را برمیگرداند، که در آن pid در فرزند0و در والد شناسه فرایند فرزند جدید است، و fd توصیفگر پرونده سمت اصلی شبهپایانه است. برای رویکرد قابلحملتر، از ماژولptyاستفاده کنید. در صورت بروز خطا،OSErrorپرتاب میشود.رویداد حسابرسی
os.forkptyرا بدون آرگومان پرتاب میکند.هشدار
در macOS، استفاده از این تابع هنگامی که با استفاده از APIهای سیستمی سطح بالاتر ترکیب شود، ناامن است، و این شامل استفاده از
urllib.requestنیز میشود.تغییر یافته در نسخهی 3.8: فراخوانی
forkpty()در یک زیرمفسر دیگر پشتیبانی نمیشود (RuntimeErrorپرتاب میشود).تغییر یافته در نسخهی 3.12: اگر پایتون بتواند تشخیص دهد که فرایند شما دارای چندین نخ است، این مورد اکنون یک
DeprecationWarningپرتاب میکند. توضیح طولانیتر دربارهیos.fork()را ببینید.دسترسپذیری: Unix, not WASI, not Android, not iOS.
- os.kill(pid, sig, /)¶
سیگنال sig را به فرایند pid ارسال میکند. ثابتهای مربوط به سیگنالهای خاصی که روی پلتفرم میزبان در دسترس هستند، در ماژول
signalتعریف شدهاند.ویندوز: سیگنالهای
signal.CTRL_C_EVENTوsignal.CTRL_BREAK_EVENTسیگنالهای خاصی هستند که فقط میتوان آنها را به فرایندهای کنسولی که یک پنجره کنسول مشترک دارند ارسال کرد، برای مثال، برخی از زیرفرایندها. هر مقدار دیگری برای sig باعث میشود فرایند بهطور غیرمشروط توسط TerminateProcess API خاتمه داده شود و کد خروجی روی sig تنظیم شود.همچنین ببینید
signal.pthread_kill().یک رویداد حسابرسی
os.killرا با آرگومانهایpidوsigپرتاب میکند.دسترسپذیری: Unix, Windows, not WASI, not iOS.
تغییر یافته در نسخهی 3.2: پشتیبانی از ویندوز اضافه شد.
- os.killpg(pgid, sig, /)¶
سیگنال sig را به گروه فرایند pgid ارسال میکند.
یک رویداد حسابرسی
os.killpgرا با آرگومانهایpgidوsigپرتاب میکند.دسترسپذیری: Unix, not WASI, not iOS.
- os.nice(increment, /)¶
increment را به «مقدار nice (niceness)» فرایند میافزاید. مقدار جدید nice (niceness) را برمیگرداند.
دسترسپذیری: Unix, not WASI.
- os.pidfd_open(pid, flags=0)¶
یک توصیفگر پرونده که به فرایند pid اشاره میکند، با flags تنظیمشده برمیگرداند. از این توصیفگر میتوان برای مدیریت فرایند بدون رقابت و سیگنال استفاده کرد.
برای جزئیات بیشتر، صفحهی man مربوط به pidfd_open(2) را ببینید.
دسترسپذیری: Linux >= 5.3, Android >=
build-timeAPI level 31اضافه شده در نسخهی 3.9.
- os.PIDFD_NONBLOCK¶
این پرچم نشان میدهد که توصیفگر پرونده غیرمسدود خواهد بود. اگر فرایندی که توصیفگر پرونده به آن ارجاع دارد هنوز خاتمه نیافته باشد، تلاش برای انتظار روی توصیفگر پرونده با استفاده از waitid(2) بهجای مسدود شدن، بلافاصله خطای
EAGAINرا برمیگرداند.
دسترسپذیری: Linux >= 5.10
اضافه شده در نسخهی 3.12.
- os.plock(op, /)¶
قطعههای برنامه را در حافظه قفل میکند. مقدار op (تعریفشده در
<sys/lock.h>) تعیین میکند کدام قطعهها قفل میشوند.دسترسپذیری: Unix, not WASI, not macOS, not iOS.
- os.popen(cmd, mode='r', buffering=-1)¶
یک پایپبه فرمان cmd یا از آن باز کنید. مقدار بازگشتی، یک شیء پرونده باز متصل به پایپ است که بسته به اینکه mode برابر
'r'(پیشفرض) یا'w'باشد، قابل خواندن یا نوشتن است. آرگومان buffering همان معنای آرگومان متناظر در تابع توکارopen()را دارد. شیء پرونده بازگشتی بهجای بایتها، رشتههای متنی را میخواند یا مینویسد.متد
closeدر صورتی که زیرفرایند با موفقیت خارج شده باشد،Noneرا بازمیگرداند، یا در صورت بروز خطا، کد بازگشتی زیرفرایند را بازمیگرداند. در سیستمهای POSIX، اگر کد بازگشتی مثبت باشد، نشاندهندهی مقدار بازگشتی فرایند است که بهاندازهی یک بایت به چپ شیفت داده شده است. اگر کد بازگشتی منفی باشد، فرایند با سیگنالی خاتمه یافته است که از قرینهی مقدار کد بازگشتی بهدست میآید. (برای مثال، اگر زیرفرایند کشته شده باشد، ممکن است مقدار بازگشتی- signal.SIGKILLباشد.) در سیستمهای ویندوزی، مقدار بازگشتی حاوی کد بازگشتیِ عدد صحیح علامتدار از فرایند فرزند است.در یونیکس، اگر نتیجهی متد
close(وضعیت خروج)Noneنباشد، میتوان ازwaitstatus_to_exitcode()برای تبدیل آن به کد خروج استفاده کرد. در ویندوز، نتیجهی متدcloseمستقیماً کد خروج (یاNone) است.این با استفاده از
subprocess.Popenپیادهسازی شده است؛ برای روشهای قدرتمندتر جهت مدیریت و ارتباط با زیرفرایندها، به مستندات آن کلاس مراجعه کنید.دسترسپذیری: not WASI, not Android, not iOS.
توجه
حالت UTF-8 پایتون بر کدگذاریهای مورد استفاده برای cmd و محتوای پایپ تأثیر میگذارد.
popen()یک دربرگیرنده ساده حولsubprocess.Popenاست. برای کنترل گزینههایی مانند کدگذاریها ازsubprocess.Popenیاsubprocess.run()استفاده کنید.منسوخسازی نرم <Soft deprecated> از نسخهی 3.14: در عوض، ماژول
subprocessتوصیه میشود.
- os.posix_spawn(path, argv, env, *, file_actions=None, setpgroup=None, resetids=False, setsid=False, setsigmask=(), setsigdef=(), scheduler=None)¶
پوششی برای API کتابخانهی C مربوط به
posix_spawn()جهت استفاده از پایتون فراهم میکند.بیشتر کاربران باید بهجای
posix_spawn()ازsubprocess.run()استفاده کنند.آرگومانهای فقط جایگاهی path، args و env مشابه
execve()هستند. env میتواندNoneباشد، که در این صورت از محیط فرایند جاری استفاده میشود.پارامتر path مسیر پرونده اجرایی است. path باید شامل یک پوشه باشد. برای ارسال پرونده اجرایی بدون پوشه از
posix_spawnp()استفاده کنید.آرگومان file_actions میتواند دنبالهای از تاپلهایی باشد که اقدامات لازم برای اعمال بر توصیفگرهای پرونده مشخصی را در فرآیند فرزند، بین مراحل
fork()وexec()در پیادهسازی کتابخانهی C توصیف میکنند. اولین آیتم در هر تاپل باید یکی از سه نشانگر نوع فهرستشده در زیر باشد که عناصر باقیماندهی تاپل را توصیف میکند:- os.POSIX_SPAWN_OPEN¶
(
os.POSIX_SPAWN_OPEN, fd, path, flags, mode)os.dup2(os.open(path, flags, mode), fd)را اجرا میکند.
- os.POSIX_SPAWN_CLOSE¶
(
os.POSIX_SPAWN_CLOSE, fd)os.close(fd)را اجرا میکند.
- os.POSIX_SPAWN_DUP2¶
(
os.POSIX_SPAWN_DUP2, fd, new_fd)os.dup2(fd, new_fd)را اجرا میکند.
- os.POSIX_SPAWN_CLOSEFROM¶
(
os.POSIX_SPAWN_CLOSEFROM, fd)os.closerange(fd, INF)را اجرا میکند.
این تاپلها متناظر با فراخوانیهای API کتابخانهی C هستند:
posix_spawn_file_actions_addopen()،posix_spawn_file_actions_addclose()،posix_spawn_file_actions_adddup2()وposix_spawn_file_actions_addclosefrom_np()که برای آمادهسازی خود فراخوانیposix_spawn()به کار میروند.آرگومان setpgroup گروه فرایند فرزند را روی مقدار تعیینشده تنظیم میکند. اگر مقدار تعیینشده ۰ باشد، شناسهی گروه فرایند فرزند با شناسهی فرایند آن یکسان میشود. اگر مقدار setpgroup تنظیمنشده باشد، فرزند شناسهی گروه فرایند والد را به ارث میبرد. این آرگومان معادل پرچم
POSIX_SPAWN_SETPGROUPدر کتابخانهی C است.اگر آرگومان resetids برابر
Trueباشد، UID و GID مؤثر فرآیند فرزند به UID و GID واقعی فرآیند والد بازنشانی میشود. اگر آرگومانFalseباشد، فرآیند فرزند UID و GID مؤثر فرآیند والد را حفظ میکند. در هر صورت، اگر بیتهای دسترسی set-user-ID و set-group-ID روی پرونده اجرایی فعال باشند، اثر آنها بر تنظیم UID و GID مؤثر غلبه میکند. این آرگومان معادل پرچمPOSIX_SPAWN_RESETIDSدر کتابخانهی C است.اگر آرگومان setsid برابر
Trueباشد، یک شناسهی نشست جدید برایposix_spawnایجاد میشود. setsid به پرچمPOSIX_SPAWN_SETSIDیاPOSIX_SPAWN_SETSID_NPنیاز دارد. در غیر این صورت،NotImplementedErrorپرتاب میشود.آرگومان setsigmask، نقاب سیگنال را روی مجموعه سیگنال مشخصشده تنظیم میکند. اگر از این پارامتر استفاده نشود، فرزند نقاب سیگنال والد را به ارث میبرد. این آرگومان متناظر با پرچم
POSIX_SPAWN_SETSIGMASKدر کتابخانه C است.آرگومان sigdef رفتار همه سیگنالهای موجود در مجموعهی مشخصشده را بازنشانی میکند. این آرگومان متناظر با پرچم
POSIX_SPAWN_SETSIGDEFدر کتابخانه C است.آرگومان scheduler باید یک تاپل حاوی سیاست زمانبند (اختیاری) و یک نمونه از
sched_paramبا پارامترهای زمانبند باشد. مقدارNoneبهجای سیاست زمانبند نشان میدهد که سیاست زمانبند ارائه نشده است. این آرگومان ترکیبی از پرچمهایPOSIX_SPAWN_SETSCHEDPARAMوPOSIX_SPAWN_SETSCHEDULERدر کتابخانه C است.یک رویداد حسابرسی
os.posix_spawnرا با آرگومانهایpath،argvوenvپرتاب میکند.اضافه شده در نسخهی 3.8.
تغییر یافته در نسخهی 3.13: پارامتر env،
Noneرا میپذیرد.os.POSIX_SPAWN_CLOSEFROMدر پلتفرمهایی کهposix_spawn_file_actions_addclosefrom_np()وجود دارد، در دسترس است.دسترسپذیری: Unix, not WASI, not Android, not iOS.
- os.posix_spawnp(path, argv, env, *, file_actions=None, setpgroup=None, resetids=False, setsid=False, setsigmask=(), setsigdef=(), scheduler=None)¶
API کتابخانهی C مربوط به
posix_spawnp()را برای استفاده از پایتون پوشش میدهد.مشابه
posix_spawn()است، با این تفاوت که سامانه فایلبندی اجرایی را در فهرست پوشههای مشخصشده توسط متغیر محیطیPATHجستجو میکند (همانگونه که برایexecvp(3)انجام میشود).یک رویداد حسابرسی
os.posix_spawnرا با آرگومانهایpath،argvوenvپرتاب میکند.اضافه شده در نسخهی 3.8.
دسترسپذیری: POSIX, not WASI, not Android, not iOS.
مستندات
posix_spawn()را ببینید.
- os.register_at_fork(*, before=None, after_in_parent=None, after_in_child=None)¶
فراخوانیپذیرهایی را ثبت کنید تا هنگام انشعاب یک فرایند فرزند جدید با استفاده از
os.fork()یا APIهای مشابهِ تکثیر فرایند اجرا شوند. پارامترها اختیاری و فقط کلیدواژهای هستند. هرکدام یک نقطهی فراخوانی متفاوت را مشخص میکند.before تابعی است که پیش از fork کردن یک فرایند فرزند فراخوانی میشود.
after_in_parent تابعی است که پس از فورک (forking) یک فرایند فرزند، از فرایند والد فراخوانی میشود.
after_in_child تابعی است که از فرایند فرزند فراخوانی میشود.
این فراخوانیها تنها زمانی انجام میشوند که انتظار رود کنترل به مفسر پایتون بازگردد. یک راهاندازی معمول
subprocessباعث فراخوانی آنها نمیشود، زیرا فرایند فرزند قرار نیست دوباره وارد مفسر شود.توابعی که برای اجرا پیش از fork ثبتشدهاند، بهترتیب معکوس ثبت فراخوانی میشوند. توابعی که برای اجرا پس از fork (چه در والد و چه در فرزند) ثبتشدهاند، بهترتیب ثبت فراخوانی میشوند.
توجه داشته باشید که کد C شخص ثالثی که
fork()را فراخوانی میکند، ممکن است آن توابع را فراخوانی نکند، مگر اینکه بهصراحتPyOS_BeforeFork()،PyOS_AfterFork_Parent()وPyOS_AfterFork_Child()را فراخوانی کند.هیچ راهی برای لغو ثبت یک تابع وجود ندارد.
دسترسپذیری: Unix, not WASI, not Android, not iOS.
اضافه شده در نسخهی 3.7.
- os.spawnl(mode, path, ...)¶
- os.spawnle(mode, path, ..., env)¶
- os.spawnlp(mode, file, ...)¶
- os.spawnlpe(mode, file, ..., env)¶
- os.spawnv(mode, path, args)¶
- os.spawnve(mode, path, args, env)¶
- os.spawnvp(mode, file, args)¶
- os.spawnvpe(mode, file, args, env)¶
برنامهی path را در یک فرایند جدید اجرا کنید.
(توجه داشته باشید که ماژول
subprocessامکانات قدرتمندتری برای ایجاد فرایندهای جدید و دریافت نتایج آنها فراهم میکند؛ استفاده از آن ماژول به استفاده از این توابع ترجیح دارد. بهویژه بخش جایگزینی توابع قدیمی با ماژول subprocess را بررسی کنید.)اگر mode برابر
P_NOWAITباشد، این تابع شناسهی فرایند جدید را برمیگرداند؛ اگر mode برابرP_WAITباشد، در صورت خروج عادی فرایند، کد خروج آن را برمیگرداند، یا-signalرا برمیگرداند، که در آن signal سیگنالی است که فرایند را خاتمه داده است. در ویندوز، شناسهی فرایند در واقع دسته فرایند (process handle) است، بنابراین میتوان از آن با تابعwaitpid()استفاده کرد.توجه داشته باشید که در VxWorks، این تابع هنگامی که فرایند جدید خاتمه داده شود،
-signalرا برنمیگرداند. در عوض، استثنای OSError را پرتاب میکند.انواع «l» و «v» توابع
spawn*در چگونگی ارسال آرگومانهای خط فرمان تفاوت دارند. اگر تعداد پارامترها هنگام نوشتن کد ثابت باشد، شاید کار با انواع «l» آسانترین باشد؛ پارامترهای جداگانه صرفاً به پارامترهای اضافی برای توابعspawnl*()تبدیل میشوند. انواع «v» زمانی مناسب هستند که تعداد پارامترها متغیر باشد و آرگومانها در قالب یک فهرست یا تاپلبهعنوان پارامتر args ارسال میشوند. در هر دو حالت، آرگومانهای فرایند فرزند باید با نام فرمانی که اجرا میشود شروع شوند.گونههایی که یک «p» دوم نزدیک به انتها دارند (
spawnlp()،spawnlpe()،spawnvp()وspawnvpe())، از متغیر محیطیPATHبرای یافتن پرونده برنامهی file استفاده میکنند. هنگامی که محیط جایگزین میشود (با استفاده از یکی از گونههایspawn*e، که در پاراگراف بعدی توضیح داده شده است)، محیط جدید بهعنوان منبع متغیرPATHاستفاده میشود. سایر گونهها،spawnl()،spawnle()،spawnv()وspawnve()، از متغیرPATHبرای یافتن پرونده اجرایی استفاده نمیکنند؛ path باید حاوی مسیر مطلق یا نسبی مناسب باشد.برای
spawnle()،spawnlpe()،spawnve()وspawnvpe()(توجه داشته باشید که همهی اینها به "e" ختم میشوند)، پارامتر env باید یک نگاشت باشد که برای تعریف متغیرهای محیطی فرایند جدید استفاده میشود (آنها بهجای محیط فرایند جاری استفاده میشوند)؛ توابعspawnl()،spawnlp()،spawnv()وspawnvp()همگی باعث میشوند فرایند جدید محیط فرایند جاری را به ارث ببرد. توجه داشته باشید که کلیدها و مقدارها در دیکشنری env باید رشته باشند؛ کلیدها یا مقدارهای نامعتبر موجب شکست تابع با مقدار بازگشتی127میشوند.بهعنوان مثال، فراخوانیهای زیر به
spawnlp()وspawnvpe()معادل هستند:import os os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null') L = ['cp', 'index.html', '/dev/null'] os.spawnvpe(os.P_WAIT, 'cp', L, os.environ)
یک رویداد حسابرسی
os.spawnرا با آرگومانهایmode،path،argsوenvپرتاب میکند.دسترسپذیری: Unix, Windows, not WASI, not Android, not iOS.
spawnlp()،spawnlpe()،spawnvp()وspawnvpe()در ویندوز در دسترس نیستند.spawnle()وspawnve()در ویندوز نخایمن نیستند؛ توصیه میکنیم در عوض از ماژولsubprocessاستفاده کنید.تغییر یافته در نسخهی 3.6: یک path-like object را میپذیرد.
منسوخسازی نرم <Soft deprecated> از نسخهی 3.14: در عوض، ماژول
subprocessتوصیه میشود.
- os.P_NOWAIT¶
- os.P_NOWAITO¶
مقادیر ممکن برای پارامتر mode در خانوادهی توابع
spawn*. اگر هر یک از این مقادیر داده شود، توابعspawn*به محض ایجاد فرایند جدید، با شناسهی فرایند بهعنوان مقدار بازگشتی بازمیگردند.دسترسپذیری: Unix, Windows.
- os.P_WAIT¶
مقدار ممکن برای پارامتر mode در خانوادهی توابع
spawn*. اگر این مقدار بهعنوان mode داده شود، توابعspawn*تا زمانی که فرایند جدید بهطور کامل اجرا نشده باشد، بازنمیگردند و در صورت موفقیتآمیز بودن اجرا، کد خروجی فرایند را برمیگردانند، یا اگر سیگنالی فرایند را از بین ببرد،-signalرا برمیگردانند.دسترسپذیری: Unix, Windows.
- os.P_DETACH¶
- os.P_OVERLAY¶
مقادیر ممکن برای پارامتر mode در خانوادهی توابع
spawn*. این مقادیر نسبت به موارد فهرستشده در بالا، قابلیت حمل کمتری دارند.P_DETACHمشابهP_NOWAITاست، اما فرایند جدید از کنسول فرایند فراخواننده جدا میشود. اگر ازP_OVERLAYاستفاده شود، فرایند جاری جایگزین خواهد شد؛ تابعspawn*بازگشت نخواهد کرد.دسترسپذیری: Windows.
- os.startfile(path[, operation][, arguments][, cwd][, show_cmd])¶
یک پرونده را با برنامهی مرتبط آن اجرا کنید.
هنگامی که operation مشخص نشده باشد، این کار مانند دوبار کلیک کردن روی پرونده در Windows Explorer یا دادن نام پرونده بهعنوان آرگومان به فرمان start از پوسته فرمان تعاملی است: پرونده با هر کاربردی (در صورت وجود) که پسوند آن به آن مرتبط شده باشد، باز میشود.
هنگامی که operation دیگری داده شود، باید یک «فعل فرمانی» (command verb) باشد که مشخص میکند با پرونده چه کاری باید انجام شود. فعلهای رایجی که توسط مایکروسافت مستند شدهاند عبارتند از
'open'،'print'و'edit'(برای استفاده روی پروندهها) و همچنین'explore'و'find'(برای استفاده روی پوشهها).هنگام راهاندازی یک برنامه، arguments را بهصورت یک رشته واحد مشخص کنید تا ارسال شوند. این آرگومان ممکن است هنگام استفاده از این تابع برای باز کردن یک سند تأثیری نداشته باشد.
پوشه کاری پیشفرض به ارث برده میشود، اما ممکن است با آرگومان cwd بازنویسی شود. این باید یک مسیر مطلق باشد. یک path نسبی بر اساس این آرگومان حل میشود.
برای تغییر سبک پیشفرض پنجره از show_cmd استفاده کنید. اینکه این مورد تأثیری دارد یا خیر، به برنامهای که اجرا میشود بستگی دارد. مقادیر، اعداد صحیحی هستند که توسط تابع
ShellExecute()در Win32 پشتیبانی میشوند.startfile()بهمحض راهاندازی برنامه مرتبط بازمیگردد. گزینهای برای منتظر ماندن تا بسته شدن برنامه وجود ندارد و راهی نیز برای دریافت وضعیت خروج برنامه وجود ندارد. پارامتر path نسبت به پوشه جاری یا cwd نسبی است. اگر میخواهید از یک مسیر مطلق استفاده کنید، اطمینان حاصل کنید که نویسه اول اسلش ('/') نباشد. ازpathlibیا تابعos.path.normpath()استفاده کنید تا اطمینان حاصل شود که مسیرها بهدرستی برای Win32 کدگذاری شدهاند.برای کاهش سربار راهاندازی مفسر، تابع Win32
ShellExecute()تا زمانی که این تابع برای نخستین بار فراخوانی نشود، شناسایی نمیشود. اگر تابع شناسایی نشود،NotImplementedErrorپرتاب خواهد شد.یک رویداد حسابرسی
os.startfileرا با آرگومانهایpathوoperationپرتاب میکند.یک رویداد حسابرسی
os.startfile/2را با آرگومانهایpath،operation،arguments،cwd،show_cmdپرتاب میکند.دسترسپذیری: Windows.
تغییر یافته در نسخهی 3.10: آرگومانهای arguments، cwd و show_cmd، و رویداد حسابرسی
os.startfile/2افزوده شدند.
- os.system(command)¶
فرمان (یک رشته) را در یک زیرپوسته اجرا میکند. این کار با فراخوانی تابع استاندارد C یعنی
system()پیادهسازی شده است و همان محدودیتها را دارد. تغییرات درsys.stdinو غیره در محیط فرمان اجراشده بازتاب نمییابد. اگر command خروجیای تولید کند، به جریان خروجی استاندارد مفسر فرستاده خواهد شد. استاندارد C معنای مقدار بازگشتی تابع C را تعیین نمیکند، بنابراین مقدار بازگشتی تابع Python وابسته به سیستم است.در یونیکس، مقدار بازگشتی، وضعیت خروج فرایند است که در قالب مشخصشده برای
wait()کدگذاری شده است.در ویندوز، مقدار برگشتی همان مقداری است که پوستهی سیستم پس از اجرای command برمیگرداند. پوسته از طریق متغیر محیطی ویندوز
COMSPECتعیین میشود: این پوسته معمولاً cmd.exe است که وضعیت خروجی دستور اجراشده را برمیگرداند؛ در سیستمهایی که از پوستهی غیربومی استفاده میکنند، به مستندات پوستهی خود مراجعه کنید.ماژول
subprocessامکانات قدرتمندتری برای ایجاد فرایندهای جدید و بازیابی نتایج آنها فراهم میکند؛ استفاده از آن ماژول بهجای استفاده از این تابع توصیه میشود. برای دیدن برخی راهکارهای مفید، بخش جایگزینی توابع قدیمی با ماژول subprocess را در مستنداتsubprocessببینید.در یونیکس، میتوان از
waitstatus_to_exitcode()برای تبدیل نتیجه (وضعیت خروج) به کد خروج استفاده کرد. در ویندوز، نتیجه مستقیماً کد خروج است.یک رویداد حسابرسی
os.systemرا با آرگومانcommandپرتاب میکند.دسترسپذیری: Unix, Windows, not WASI, not Android, not iOS.
- os.times()¶
زمانهای فرایند سراسری جاری را برمیگرداند. مقدار بازگشتی یک شیء با ۵ ویژگی است:
user- زمان کاربرsystem- زمان سیستمchildren_user- زمان کاربری تمام فرایندهای فرزندchildren_system- زمان سیستم برای همه فرایندهای فرزندelapsed- زمان واقعی سپریشده از یک نقطه ثابت در گذشته
برای سازگاری با نسخههای پیشین، این شیء همچنین مانند یک پنجتایی (five-tuple) شامل
user،system،children_user،children_systemوelapsedبه همین ترتیب رفتار میکند.صفحهی راهنمای یونیکس times(2) و صفحهی راهنمای times(3) در یونیکس یا مستندات MSDN برای GetProcessTimes در ویندوز را ببینید. در ویندوز، تنها
userوsystemشناختهشده هستند؛ سایر ویژگیها صفر هستند.دسترسپذیری: Unix, Windows.
تغییر یافته در نسخهی 3.3: نوع برگشتی از یک تاپل به یک شیء تاپلمانند با ویژگیهای نامدار تغییر کرد.
- os.wait()¶
منتظر تکمیل یک فرآیند فرزند میماند و یک تاپل شامل pid آن و نشانگر وضعیت خروج آن برمیگرداند: یک عدد ۱۶ بیتی که بایت پایینی آن شماره سیگنالی است که فرآیند را خاتمه داده است، و بایت بالایی آن وضعیت خروج است (اگر شماره سیگنال صفر باشد)؛ اگر یک پرونده core ایجاد شده باشد، بیت بالایی بایت پایینی تنظیم میشود.
اگر هیچ فرآیند فرزندی وجود نداشته باشد که بتوان منتظر آن ماند،
ChildProcessErrorپرتاب میشود.میتوان از
waitstatus_to_exitcode()برای تبدیل وضعیت خروج به کد خروج استفاده کرد.دسترسپذیری: Unix, not WASI, not Android, not iOS.
همچنین ملاحظه نمائید
سایر توابع
wait*()که در زیر مستند شدهاند، برای منتظر ماندن برای تکمیل یک فرایند فرزند مشخص قابل استفاده هستند و گزینههای بیشتری دارند.waitpid()تنها تابعی است که در ویندوز نیز در دسترس است.
- os.waitid(idtype, id, options, /)¶
منتظر اتمام یک فرایند فرزند بمانید.
idtype میتواند
P_PID،P_PGID،P_ALL، یا (در لینوکس)P_PIDFDباشد. تفسیر id به آن بستگی دارد؛ توضیحات جداگانهی آنها را ببینید.options ترکیبی از پرچمها با OR است. حداقل یکی از
WEXITED،WSTOPPEDیاWCONTINUEDمورد نیاز است؛WNOHANGوWNOWAITپرچمهای اختیاری اضافی هستند.مقدار بازگشتی، شیءای است که دادههای موجود در ساختار
siginfo_tرا نشان میدهد و دارای ویژگیهای زیر است:si_pid(شناسه فرایند)si_uid(شناسه کاربری واقعی فرزند)si_signo(همیشهSIGCHLD)si_status(وضعیت خروج یا شماره سیگنال، بسته بهsi_code)si_code(برای مقادیر ممکنCLD_EXITEDرا ببینید)
اگر
WNOHANGمشخص شده باشد و هیچ فرزند منطبقی در وضعیت درخواستشده وجود نداشته باشد،Noneبازگردانده میشود. در غیر این صورت، اگر هیچ فرزند منطبقی که بتوان منتظر آن ماند وجود نداشته باشد،ChildProcessErrorپرتاب میشود.دسترسپذیری: Unix, not WASI, not Android, not iOS.
اضافه شده در نسخهی 3.3.
تغییر یافته در نسخهی 3.13: این تابع اکنون در macOS نیز در دسترس است.
- os.waitpid(pid, options, /)¶
جزئیات این تابع در یونیکس و ویندوز متفاوت است.
در یونیکس: منتظر تکمیل فرایند فرزندی که با شناسهی فرایند pid مشخصشده است میماند، و یک تاپل شامل شناسهی فرایند و نشانگر وضعیت خروج آن (کدگذاریشده مانند
wait()) برمیگرداند. رفتار این فراخوانی تحت تأثیر مقدار عدد صحیح options است که برای عملکرد عادی باید0باشد.اگر pid بزرگتر از
0باشد،waitpid()اطلاعات وضعیت آن فرایند مشخص را درخواست میکند. اگر pid برابر0باشد، درخواست برای وضعیت هر فرایند فرزند در گروه فرایند فرایند جاری است. اگر pid برابر-1باشد، درخواست مربوط به هر فرایند فرزند فرایند جاری است. اگر pid کوچکتر از-1باشد، وضعیت برای هر فرایند در گروه فرایند-pid(قدر مطلق pid) درخواست میشود.options ترکیبی از پرچمها با عملگر OR است. اگر شامل
WNOHANGباشد و هیچ فرزند منطبقی در وضعیت درخواستشده وجود نداشته باشد،(0, 0)بازگردانده میشود. در غیر این صورت، اگر هیچ فرزند منطبقی که بتوان برای آن انتظار کشید وجود نداشته باشد،ChildProcessErrorپرتاب میشود. گزینههای دیگری که میتوان از آنها استفاده کرد،WUNTRACEDوWCONTINUEDهستند.در ویندوز: منتظر تکمیل فرایندی که با دستهگیرهی فرایند pid مشخص شده است میماند و یک تاپل شامل pid و وضعیت خروج آن که به اندازهی ۸ بیت به چپ شیفت داده شده است برمیگرداند (شیفت دادن، استفادهی بینسکویی از تابع را آسانتر میکند). یک pid کوچکتر یا مساوی
0در ویندوز معنای خاصی ندارد و استثنایی را پرتاب میکند. مقدار عدد صحیح options تأثیری ندارد. pid میتواند به هر فرایندی که شناسهی آن شناختهشده است اشاره کند، نه لزوماً به یک فرایند فرزند. توابعspawn*فراخوانیشده باP_NOWAIT، دستهگیرههای مناسب فرایند برمیگردانند.میتوان از
waitstatus_to_exitcode()برای تبدیل وضعیت خروج به کد خروج استفاده کرد.دسترسپذیری: Unix, Windows, not WASI, not Android, not iOS.
تغییر یافته در نسخهی 3.5: اگر فراخوانی سیستمی دچار وقفه شود و مدیر سیگنال استثنایی پرتاب نکند، تابع اکنون بهجای پرتاب استثنای
InterruptedError، فراخوانی سیستمی را مجدداً اجرا میکند (برای مشاهده دلیل، PEP 475 را ببینید).
- os.wait3(options)¶
مشابه
waitpid()است، با این تفاوت که آرگومان شناسهی فرایند داده نمیشود و یک تاپل ۳ عنصری شامل شناسهی فرایند فرزند، نشانگر وضعیت خروج و اطلاعات مصرف منابع بازگردانده میشود. برای جزئیات درباره اطلاعات مصرف منابع، بهresource.getrusage()مراجعه کنید. آرگومان options همان آرگومانی است که بهwaitpid()وwait4()داده میشود.میتوان از
waitstatus_to_exitcode()برای تبدیل وضعیت خروج به کد خروج استفاده کرد.دسترسپذیری: Unix, not WASI, not Android, not iOS.
- os.wait4(pid, options)¶
مشابه
waitpid()است، با این تفاوت که یک تاپل ۳ عضوی شامل شناسه فرایند فرزند، نشانگر وضعیت خروج و اطلاعات مصرف منابع بازگردانده میشود. برای جزئیات درباره اطلاعات مصرف منابع بهresource.getrusage()مراجعه کنید. آرگومانهایwait4()همان آرگومانهایwaitpid()هستند.میتوان از
waitstatus_to_exitcode()برای تبدیل وضعیت خروج به کد خروج استفاده کرد.دسترسپذیری: Unix, not WASI, not Android, not iOS.
- os.P_PID¶
- os.P_PGID¶
- os.P_ALL¶
- os.P_PIDFD¶
اینها مقادیر ممکن برای idtype در
waitid()هستند. آنها بر چگونگی تفسیر id تأثیر میگذارند:P_PID- منتظر فرزند که PID آن id است بمانید.P_PGID- منتظر هر فرزندی که شناسه گروه فرایند آن id است بمانید.P_ALL- منتظر هر فرزند میماند؛ id نادیده گرفته میشود.P_PIDFD- منتظر فرزند شناساییشده با توصیفگر پرونده id (یک توصیفگر پرونده فرایند که باpidfd_open()ایجاد شده است) بمانید.
دسترسپذیری: Unix, not WASI, not Android, not iOS.
توجه
P_PIDFDفقط در لینوکس >= 5.4 در دسترس است.اضافه شده در نسخهی 3.3.
اضافه شده در نسخهی 3.9: ثابت
P_PIDFD.
- os.WCONTINUED¶
این پرچم options برای
waitpid()،wait3()،wait4()وwaitid()سبب میشود فرآیندهای فرزند در صورتی گزارش شوند که از آخرین باری که گزارش شدهاند، از حالت توقف ناشی از کنترل کار ادامه یافته باشند.دسترسپذیری: Unix, not WASI, not Android, not iOS.
- os.WEXITED¶
این پرچم options برای
waitid()موجب میشود فرآیندهای فرزندی که خاتمهیافتهاند گزارش شوند.سایر توابع
wait*همیشه فرآیندهای فرزندی را که خاتمه یافتهاند گزارش میکنند، بنابراین این گزینه برای آنها در دسترس نیست.دسترسپذیری: Unix, not WASI, not Android, not iOS.
اضافه شده در نسخهی 3.3.
- os.WSTOPPED¶
این پرچم options برای
waitid()باعث میشود فرآیندهای فرزندی که با تحویل یک سیگنال متوقف شدهاند، گزارش شوند.این گزینه برای سایر توابع
wait*در دسترس نیست.دسترسپذیری: Unix, not WASI, not Android, not iOS.
اضافه شده در نسخهی 3.3.
- os.WUNTRACED¶
این پرچم options برای
waitpid()،wait3()وwait4()باعث میشود فرآیندهای فرزند نیز در صورتی گزارش شوند که متوقف شده باشند، اما وضعیت فعلی آنها از زمان توقفشان گزارش نشده باشد.این گزینه برای
waitid()در دسترس نیست.دسترسپذیری: Unix, not WASI, not Android, not iOS.
- os.WNOHANG¶
این پرچم options باعث میشود
waitpid()،wait3()،wait4()وwaitid()در صورتی که هیچ وضعیت فرآیند فرزندی بهصورت فوری در دسترس نباشد، بلافاصله بازگردند.دسترسپذیری: Unix, not WASI, not Android, not iOS.
- os.WNOWAIT¶
این پرچم options باعث میشود
waitid()فرزند را در وضعیتی انتظارپذیر باقی بگذارد، تا بتوان با فراخوانی بعدیwait*()دوباره اطلاعات وضعیت فرزند را دریافت کرد.این گزینه برای سایر توابع
wait*در دسترس نیست.دسترسپذیری: Unix, not WASI, not Android, not iOS.
- os.CLD_EXITED¶
- os.CLD_KILLED¶
- os.CLD_DUMPED¶
- os.CLD_TRAPPED¶
- os.CLD_STOPPED¶
- os.CLD_CONTINUED¶
اینها مقادیر ممکن برای
si_codeدر نتیجهی برگرداندهشده توسطwaitid()هستند.دسترسپذیری: Unix, not WASI, not Android, not iOS.
اضافه شده در نسخهی 3.3.
تغییر یافته در نسخهی 3.9: مقادیر
CLD_KILLEDوCLD_STOPPEDافزوده شدند.
- os.waitstatus_to_exitcode(status)¶
تبدیل وضعیت انتظار به کد خروجی.
در یونیکس:
اگر فرآیند بهطور عادی خارج شده باشد (اگر
WIFEXITED(status)درست باشد)، وضعیت خروج فرآیند را برمیگرداند (WEXITSTATUS(status)را برمیگرداند): نتیجه بزرگتر یا مساوی ۰.اگر فرایند با یک سیگنال خاتمه یافته باشد (اگر
WIFSIGNALED(status)درست باشد)،-signumرا برمیگرداند که signum شماره سیگنالی است که باعث خاتمه فرایند شده است (-WTERMSIG(status)را برمیگرداند): نتیجه کمتر از ۰.در غیر این صورت، یک
ValueErrorپرتاب میشود.
در ویندوز، status را به اندازهی ۸ بیت به راست شیفتیافته برمیگرداند.
در یونیکس، اگر فرایند در حال ردگیری باشد یا اگر
waitpid()با گزینهیWUNTRACEDفراخوانی شده باشد، فراخواننده باید ابتدا بررسی کند که آیاWIFSTOPPED(status)درست است یا خیر. اگرWIFSTOPPED(status)درست باشد، این تابع نباید فراخوانی شود.همچنین ملاحظه نمائید
توابع
WIFEXITED()،WEXITSTATUS()،WIFSIGNALED()،WTERMSIG()،WIFSTOPPED()،WSTOPSIG().دسترسپذیری: Unix, Windows, not WASI, not Android, not iOS.
اضافه شده در نسخهی 3.9.
توابع زیر یک کد وضعیت فرایند را که توسط system()، wait() یا waitpid() بازگشت داده شده است، بهعنوان پارامتر دریافت میکنند. میتوان از آنها برای تعیین سرنوشت یک فرایند استفاده کرد.
- os.WCOREDUMP(status, /)¶
اگر برای فرایند یک برونریزی هسته تولید شده باشد،
Trueبرمیگرداند، در غیر این صورتFalseبرمیگرداند.این تابع باید تنها زمانی استفاده شود که
WIFSIGNALED()درست باشد.دسترسپذیری: Unix, not WASI, not Android, not iOS.
- os.WIFCONTINUED(status)¶
اگر یک فرزند متوقفشده با ارسال
SIGCONTاز سر گرفته شده باشد (اگر فرایند از یک توقف کنترل کار ادامه یافته باشد)،Trueرا برمیگرداند، در غیر این صورتFalseرا برمیگرداند.گزینهی
WCONTINUEDرا ببینید.دسترسپذیری: Unix, not WASI, not Android, not iOS.
- os.WIFSTOPPED(status)¶
اگر فرایند با ارسال یک سیگنال متوقف شده باشد،
Trueرا برمیگرداند، در غیر این صورتFalseرا برمیگرداند.WIFSTOPPED()تنها در صورتیTrueرا برمیگرداند که فراخوانیwaitpid()با استفاده از گزینهیWUNTRACEDانجام شده باشد یا فرایند در حال ردگیری باشد (به ptrace(2) مراجعه کنید).دسترسپذیری: Unix, not WASI, not Android, not iOS.
- os.WIFSIGNALED(status)¶
اگر فرایند با یک سیگنال خاتمه یافته باشد،
Trueبرمیگرداند؛ در غیر این صورتFalseبرمیگرداند.دسترسپذیری: Unix, not WASI, not Android, not iOS.
- os.WIFEXITED(status)¶
اگر فرایند بهصورت عادی خاتمه یافته باشد، یعنی با فراخوانی
exit()یا_exit()، یا با بازگشت ازmain()، مقدارTrueرا برمیگرداند؛ در غیر این صورت مقدارFalseرا برمیگرداند.دسترسپذیری: Unix, not WASI, not Android, not iOS.
- os.WEXITSTATUS(status)¶
وضعیت خروج فرایند را برمیگرداند.
این تابع باید تنها در صورتی استفاده شود که
WIFEXITED()درست باشد.دسترسپذیری: Unix, not WASI, not Android, not iOS.
- os.WSTOPSIG(status)¶
سیگنالی را که باعث توقف فرآیند شد، برمیگرداند.
این تابع باید تنها در صورتی استفاده شود که
WIFSTOPPED()درست باشد.دسترسپذیری: Unix, not WASI, not Android, not iOS.
- os.WTERMSIG(status)¶
شمارهی سیگنالی را که باعث خاتمهی فرایند شده است، برمیگرداند.
این تابع باید تنها زمانی استفاده شود که
WIFSIGNALED()درست باشد.دسترسپذیری: Unix, not WASI, not Android, not iOS.
رابط با زمانبند¶
این توابع چگونگی تخصیص زمان پردازنده به یک فرایند توسط سیستمعامل را کنترل میکنند. این توابع تنها در برخی از پلتفرمهای یونیکس در دسترس هستند. برای اطلاعات دقیقتر، به صفحات man یونیکس خود مراجعه کنید.
اضافه شده در نسخهی 3.3.
سیاستهای زمانبندی زیر در صورت پشتیبانی سیستمعامل، در دسترس قرار میگیرند.
- os.SCHED_OTHER¶
سیاست زمانبندی پیشفرض.
- os.SCHED_BATCH¶
سیاست زمانبندی برای فرآیندهای پرمصرف CPU که تلاش میکند تعاملپذیری بقیهی رایانه را حفظ کند.
- os.SCHED_DEADLINE¶
سیاست زمانبندی برای وظایف دارای محدودیتهای مهلت.
اضافه شده در نسخهی 3.14.
- os.SCHED_IDLE¶
سیاست زمانبندی برای وظایف پسزمینه با اولویت بسیار پایین.
- os.SCHED_NORMAL¶
نام مستعاری برای
SCHED_OTHER.اضافه شده در نسخهی 3.14.
- os.SCHED_SPORADIC¶
سیاست زمانبندی برای برنامههای سرور گاهبهگاه.
- os.SCHED_FIFO¶
یک سیاست زمانبندی اولین ورود، اولین خروج (First In First Out).
- os.SCHED_RR¶
یک سیاست زمانبندی نوبتی (round-robin).
- os.SCHED_RESET_ON_FORK¶
این پرچم میتواند با هر سیاست زمانبندی دیگری با عملگر بیتی OR ترکیب شود. هنگامی که فرایندی با این پرچم تنظیمشده fork میکند، سیاست زمانبندی و اولویت فرزند آن به پیشفرض بازنشانی میشوند.
- class os.sched_param(sched_priority)¶
این کلاس نشاندهندهی پارامترهای زمانبندی قابلتنظیم مورد استفاده در
sched_setparam()،sched_setscheduler()وsched_getparam()است. این کلاس تغییرناپذیر است.در حال حاضر، تنها یک پارامتر ممکن وجود دارد:
- sched_priority¶
اولویت زمانبندی برای یک سیاست زمانبندی.
- os.sched_get_priority_min(policy)¶
کمترین مقدار اولویت برای policy را دریافت کنید. policy یکی از ثابتهای سیاست زمانبندی در بالا است.
- os.sched_get_priority_max(policy)¶
بیشترین مقدار اولویت را برای policy دریافت کنید. policy یکی از ثابتهای سیاست زمانبندی در بالا است.
- os.sched_setscheduler(pid, policy, param, /)¶
سیاست زمانبندی را برای فرایند با PID pid تنظیم میکند. مقدار ۰ برای pid به معنای فرایند فراخوان است. policy یکی از ثابتهای سیاست زمانبندی بالا است. param یک نمونه از
sched_paramاست.
- os.sched_getscheduler(pid, /)¶
سیاست زمانبندی برای فرایندی با PID pid را برمیگرداند. مقدار ۰ برای pid به معنای فرایند فراخوان است. نتیجه یکی از ثابتهای سیاست زمانبندی بالا است.
- os.sched_setparam(pid, param, /)¶
پارامترهای زمانبندی فرایندی با PID pid را تنظیم میکند. مقدار ۰ برای pid به معنای فرایند فراخوان است. param یک نمونه از
sched_paramاست.
- os.sched_getparam(pid, /)¶
برگرداندن پارامترهای زمانبندی بهصورت یک نمونه از
sched_paramبرای فرایندی با PID pid. مقدار ۰ برای pid به معنای فرایند فراخوان است.
- os.sched_rr_get_interval(pid, /)¶
کوانتوم نوبتگردشی (round-robin quantum) را بر حسب ثانیه برای فرایندی با PID pid برمیگرداند. مقدار pid برابر ۰ به معنای فرایند فراخوان است.
- os.sched_yield()¶
بهصورت داوطلبانه CPU را واگذار کنید. برای جزئیات، sched_yield(2) را ببینید.
- os.sched_setaffinity(pid, mask, /)¶
فرایند با PID pid (یا فرایند جاری در صورت صفر بودن) را به مجموعهای از پردازندهها محدود میکند. mask یک پیمایشپذیر از اعداد صحیح است که مجموعهای از پردازندهها را نشان میدهد که فرایند باید به آنها محدود شود.
- os.sched_getaffinity(pid, /)¶
مجموعهی CPUهایی که فرآیند با PID pid به آنها محدود شده است را برمیگرداند.
اگر pid صفر باشد، مجموعهی پردازندههایی را برمیگرداند که نخ فراخوان فرایند جاری به آنها محدود شده است.
همچنین تابع
process_cpu_count()را ببینید.
اطلاعات متفرقه سیستم¶
- os.confstr(name, /)¶
مقادیر پیکربندی سیستمی با مقدار رشتهای را برمیگرداند. name مقدار پیکربندی برای واکشی را مشخص میکند؛ ممکن است رشتهای باشد که نام یک مقدار سیستمی تعریفشده است؛ این نامها در تعدادی از استانداردها (POSIX، Unix 95، Unix 98 و دیگر استانداردها) مشخص شدهاند. برخی سکوها نیز نامهای اضافهای تعریف میکنند. نامهای شناختهشده برای سیستمعامل میزبان بهعنوان کلیدهای دیکشنری
confstr_namesداده شدهاند. برای متغیرهای پیکربندی که در آن نگاشت قرار ندارند، ارسال یک عدد صحیح برای name نیز پذیرفته میشود.اگر مقدار پیکربندی مشخصشده توسط name تعریف نشده باشد،
Noneبرگردانده میشود.اگر name یک رشته باشد و شناختهشده نباشد،
ValueErrorپرتاب میشود. اگر مقدار خاصی برای name توسط سیستم میزبان پشتیبانی نشود، حتی اگر درconfstr_namesوجود داشته باشد، یکOSErrorباerrno.EINVALبهعنوان شماره خطا پرتاب میشود.دسترسپذیری: Unix.
- os.confstr_names¶
دیکشنری که نامهای پذیرفتهشده توسط
confstr()را به مقادیر عدد صحیح تعریفشده برای آن نامها توسط سیستمعامل میزبان نگاشت میکند. میتوان از این برای تعیین مجموعه نامهای شناختهشده برای سیستم استفاده کرد.دسترسپذیری: Unix.
- os.cpu_count()¶
تعداد CPUهای منطقی در سیستم را برمیگرداند. در صورت نامشخص بودن،
Noneبرمیگرداند.میتوان از تابع
process_cpu_count()برای دریافت تعداد پردازندههای منطقی قابل استفاده برای نخ فراخوانیکنندهی فرایند جاری استفاده کرد.اضافه شده در نسخهی 3.4.
تغییر یافته در نسخهی 3.13: اگر
-X cpu_countداده شده باشد یاPYTHON_CPU_COUNTتنظیم شده باشد،cpu_count()مقدار جایگزین n را برمیگرداند.
- os.getloadavg()¶
میانگین تعداد فرآیندهای موجود در صف اجرای سیستم در ۱، ۵ و ۱۵ دقیقه اخیر را برمیگرداند یا اگر میانگین بار قابلدسترس نباشد،
OSErrorرا پرتاب میکند.دسترسپذیری: Unix.
- os.process_cpu_count()¶
دریافت تعداد پردازندههای منطقی قابلاستفاده برای نخ فراخوانندهی فرایند جاری. در صورت نامشخص بودن،
Noneبرمیگرداند. ممکن است بسته به وابستگی به پردازنده (CPU affinity) کمتر ازcpu_count()باشد.میتوان از تابع
cpu_count()برای دریافت تعداد پردازندههای منطقی در سیستم استفاده کرد.اگر
-X cpu_countداده شده باشد یاPYTHON_CPU_COUNTتنظیم شده باشد،process_cpu_count()مقدار جایگزین n را بازمیگرداند.همچنین تابع
sched_getaffinity()را نیز ببینید.اضافه شده در نسخهی 3.13.
- os.sysconf(name, /)¶
مقادیر پیکربندی سامانه با مقدار عدد صحیح را برمیگرداند. اگر مقدار پیکربندی مشخصشده با name تعریفنشده باشد،
-1برگردانده میشود. کامنتهای مربوط به پارامتر name برایconfstr()در اینجا نیز صدق میکند؛ دیکشنریای که اطلاعاتی دربارهی نامهای شناختهشده ارائه میدهد،sysconf_namesاست.دسترسپذیری: Unix.
- os.sysconf_names¶
دیکشنری که نامهای پذیرفتهشده توسط
sysconf()را به مقادیر عدد صحیحی که سیستمعامل میزبان برای آن نامها تعریف کرده است نگاشت میکند. میتوان از آن برای تعیین مجموعه نامهای شناختهشده برای سیستم استفاده کرد.دسترسپذیری: Unix.
تغییر یافته در نسخهی 3.11: نام
'SC_MINSIGSTKSZ'را اضافه کنید.
مقادیر داده زیر برای پشتیبانی از عملیات دستکاری مسیر استفاده میشوند. این مقادیر برای همهی سکوها تعریف شدهاند.
عملیات سطح بالاتر روی مسیرها در ماژول os.path تعریف شدهاند.
- os.curdir¶
رشته ثابتی که سیستمعامل برای ارجاع به پوشه جاری از آن استفاده میکند. این مقدار برای ویندوز و POSIX برابر
'.'است. همچنین از طریقos.pathنیز در دسترس است.
- os.pardir¶
رشتهی ثابتی که سیستمعامل برای ارجاع به پوشهی والد از آن استفاده میکند. این رشته برای ویندوز و POSIX برابر با
'..'است. همچنین از طریقos.pathنیز در دسترس است.
- os.sep¶
نویسهای که سیستمعامل برای جداسازی کامپوننتهای مسیر از آن استفاده میکند. این مقدار برای POSIX
'/'و برای ویندوز'\\'است. توجه داشته باشید که دانستن این مقدار برای تجزیه یا الحاق مسیرها کافی نیست — ازos.path.split()وos.path.join()استفاده کنید — اما این مقدار گاهی مفید است. همچنین از طریقos.pathنیز در دسترس است.
- os.altsep¶
یک نویسه جایگزین که توسط سیستمعامل برای جداسازی کامپوننتهای مسیرنام استفاده میشود، یا
Noneاگر تنها یک نویسه جداکننده وجود داشته باشد. این مقدار در سیستمهای ویندوزی که در آنهاsepیک بکاسلش (backslash) است، روی'/'تنظیم شده است. همچنین از طریقos.pathدر دسترس است.
- os.extsep¶
نویسهای که نام پایهی پرونده را از پسوند جدا میکند؛ برای مثال،
'.'درos.py. همچنین از طریقos.pathنیز در دسترس است.
- os.pathsep¶
نویسهای که بهطور معمول توسط سیستمعامل برای جدا کردن اجزای مسیر جستجو (مانند
PATH) استفاده میشود، مانند':'برای POSIX یا';'برای Windows. همچنین از طریقos.pathدر دسترس است.
- os.defpath¶
مسیر جستجوی پیشفرضی که
exec*p*وspawn*p*از آن استفاده میکنند، در صورتی که محیط فاقد کلید'PATH'باشد. همچنین از طریقos.pathدر دسترس است.
- os.linesep¶
رشتهای که برای جدا کردن (یا بهطور دقیقتر، پایان دادن) سطرها در سکوی فعلی استفاده میشود. این ممکن است یک نویسه باشد، مانند
'\n'برای POSIX، یا چند نویسه باشد، برای مثال'\r\n'برای Windows. هنگام نوشتن پروندههایی که در حالت متنی باز شدهاند (حالت پیشفرض)، از os.linesep بهعنوان پایاندهنده خط استفاده نکنید؛ در عوض، در تمام سکوها از یک'\n'استفاده کنید.
- os.devnull¶
مسیر پرونده دستگاه null. برای مثال:
'/dev/null'برای POSIX،'nul'برای ویندوز. همچنین از طریقos.pathنیز در دسترس است.
- os.RTLD_LAZY¶
- os.RTLD_NOW¶
- os.RTLD_GLOBAL¶
- os.RTLD_LOCAL¶
- os.RTLD_NODELETE¶
- os.RTLD_NOLOAD¶
- os.RTLD_DEEPBIND¶
پرچمهایی برای استفاده با توابع
setdlopenflags()وgetdlopenflags(). برای آگاهی از معنای پرچمهای مختلف، صفحهی راهنمای یونیکس dlopen(3) را ببینید.اضافه شده در نسخهی 3.3.
اعداد تصادفی¶
- os.getrandom(size, flags=0)¶
حداکثر size بایت تصادفی را دریافت کنید. این تابع ممکن است بایتهای کمتری نسبت به تعداد درخواستشده برگرداند.
میتوان از این بایتها برای بذردهی به تولیدگرهای اعداد تصادفی فضای کاربر یا برای اهداف رمزنگاری استفاده کرد.
getrandom()به آنتروپی گردآوریشده از راهاندازهای دستگاه و دیگر منابع نویز محیطی متکی است. خواندن مقادیر زیادی از داده بهطور غیرضروری، تأثیر منفی بر سایر کاربران دستگاههای/dev/randomو/dev/urandomخواهد داشت.آرگومان flags یک نقاب بیتی است که میتواند شامل صفر یا چند مقدار از مقادیر زیر باشد که با OR بیتی با هم ترکیب شدهاند:
os.GRND_RANDOMوGRND_NONBLOCK.همچنین صفحهی راهنمای getrandom() در لینوکس را ببینید.
دسترسپذیری: Linux >= 3.17.
اضافه شده در نسخهی 3.6.
- os.urandom(size, /)¶
یک رشتهبایت (bytestring) از size بایت تصادفی مناسب برای استفاده در رمزنگاری برمیگرداند.
این تابع بایتهای تصادفی را از یک منبع تصادفی مختص سیستمعامل برمیگرداند. دادههای برگرداندهشده باید بهاندازه کافی برای کاربردهای رمزنگاری غیرقابل پیشبینی باشند، اگرچه کیفیت دقیق آنها به پیادهسازی سیستمعامل بستگی دارد.
در لینوکس، اگر فراخوانی سیستمی
getrandom()در دسترس باشد، در حالت مسدودکننده استفاده میشود: تا زمانی مسدود میماند که استخر آنتروپی urandom سیستم مقداردهی اولیه شده باشد (۱۲۸ بیت آنتروپی توسط کرنل جمعآوری شده باشد). برای دیدن دلایل، PEP 524 را ببینید. در لینوکس، میتوان از تابعgetrandom()برای دریافت بایتهای تصادفی در حالت غیرمسدودکننده (با استفاده از پرچمGRND_NONBLOCK) یا برای پایش تا زمان مقداردهی اولیهی استخر آنتروپی urandom سیستم استفاده کرد.در سیستمهای شبهیونیکس، بایتهای تصادفی از دستگاه
/dev/urandomخوانده میشوند. اگر دستگاه/dev/urandomدر دسترس نباشد یا قابل خواندن نباشد، استثنایNotImplementedErrorپرتاب میشود.در ویندوز، از
BCryptGenRandom()استفاده خواهد شد.همچنین ملاحظه نمائید
ماژول
secretsتوابع سطح بالاتری را فراهم میکند. برای استفاده از رابطی آسان برای تولیدکنندهی اعداد تصادفی ارائهشده توسط سکوی شما، لطفاًrandom.SystemRandomرا ببینید.تغییر یافته در نسخهی 3.5: در لینوکس 3.17 و جدیدتر، اکنون در صورت دسترسی از فراخوانی سیستمی
getrandom()استفاده میشود. در OpenBSD 5.6 و جدیدتر، اکنون از تابعgetentropy()در C استفاده میشود. این توابع از استفاده از یک توصیفگر پرونده داخلی اجتناب میکنند.تغییر یافته در نسخهی 3.5.2: در لینوکس، اگر فراخوانی سیستمی
getrandom()مسدود شود (استخر آنتروپی urandom هنوز مقداردهی اولیه نشده است)، به خواندن/dev/urandomبازمیگردد.تغییر یافته در نسخهی 3.6: در لینوکس، اکنون از
getrandom()در حالت مسدودکننده برای افزایش امنیت استفاده میشود.تغییر یافته در نسخهی 3.11: در ویندوز، بهجای
CryptGenRandom()که منسوخ شده است، ازBCryptGenRandom()استفاده میشود.
- os.GRND_NONBLOCK¶
بهطور پیشفرض، هنگام خواندن از
/dev/random،getrandom()در صورتی مسدود میشود که هیچ بایت تصادفی در دسترس نباشد، و هنگام خواندن از/dev/urandom، در صورتی مسدود میشود که استخر آنتروپی (entropy pool) هنوز مقداردهی اولیه نشده باشد.اگر پرچم
GRND_NONBLOCKتنظیم شده باشد،getrandom()در این موارد مسدود نمیشود، بلکه بلافاصلهBlockingIOErrorرا پرتاب میکند.اضافه شده در نسخهی 3.6.
- os.GRND_RANDOM¶
اگر این بیت تنظیم شده باشد، بایتهای تصادفی از استخر
/dev/randomبهجای استخر/dev/urandomبرداشت میشوند.اضافه شده در نسخهی 3.6.