platform --- دسترسی به دادههای شناسایی پلتفرم زیربنایی¶
کد منبع: Lib/platform.py
توجه
سکوهای خاص بهترتیب حروف الفبا فهرست شدهاند و لینوکس در بخش یونیکس قرار دارد.
چندسکویی¶
- platform.architecture(executable=sys.executable, bits='', linkage='')¶
اطلاعات گوناگون معماری را از پرونده اجرایی دادهشده (که بهطور پیشفرض دودویی مفسر پایتون است) پرسوجو میکند.
یک تاپل
(bits, linkage)برمیگرداند که حاوی اطلاعاتی درباره معماری بیت و قالب پیوند استفادهشده برای پرونده اجرایی است. هر دو مقدار بهصورت رشته برگردانده میشوند.مقادیری که قابل تعیین نیستند، به همان صورتی که توسط پیشتنظیمهای پارامتر داده شدهاند، بازگردانده میشوند. اگر bits بهصورت
''داده شود،sizeof(pointer)(یاsizeof(long)در نسخهی پایتون < 1.5.2) بهعنوان نشانگر اندازهی اشارهگر پشتیبانیشده استفاده میشود.این تابع برای انجام کار اصلی به دستور
fileسیستم متکی است. این دستور در بیشتر سکوهای یونیکسی، اگر نه همهی آنها، در دسترس است و در برخی سکوهای غیریونیکسی نیز تنها در صورتی در دسترس است که پرونده اجرایی به مفسر پایتون اشاره کند. هنگامی که نیازهای فوق برآورده نشوند، از پیشفرضهای مناسب استفاده میشود.توجه
در macOS (و شاید در پلتفرمهای دیگر)، پروندههای اجرایی ممکن است پروندههای یونیورسال (universal files) حاوی معماریهای متعدد باشند.
برای بهدست آوردن «۶۴ بیتی بودن» مفسر جاری، قابلاطمینانتر است که ویژگی
sys.maxsizeرا بررسی کنید:is_64bits = sys.maxsize > 2**32
- platform.machine()¶
نوع ماشین را برمیگرداند، مثلاً
'AMD64'. اگر مقدار قابل تعیین نباشد، یک رشته خالی برگردانده میشود.خروجی وابسته به پلتفرم است و ممکن است از نظر بزرگی و کوچکی نویسهها و قراردادهای نامگذاری متفاوت باشد.
- platform.node()¶
نام شبکهی رایانه را برمیگرداند (ممکن است کامل نباشد!). اگر مقدار قابل تعیین نباشد، یک رشتهی خالی برگردانده میشود.
- platform.platform(aliased=False, terse=False)¶
یک رشته واحد بازمیگرداند که سکوی زیرین را با بیشترین اطلاعات مفید ممکن شناسایی میکند.
خروجی بهجای آنکه قابل تجزیه توسط ماشین باشد، خوانا برای انسان در نظر گرفته شده است. ممکن است در سکوهای مختلف متفاوت به نظر برسد و این امر عمدی است.
اگر aliased برابر true باشد، تابع از نامهای مستعار برای پلتفرمهای مختلفی استفاده میکند که نامهای سیستمی آنها با نامهای رایجشان تفاوت دارند؛ برای مثال SunOS بهصورت Solaris گزارش خواهد شد. برای پیادهسازی این موضوع از تابع
system_alias()استفاده میشود.تنظیم terse روی true باعث میشود تابع تنها حداقل مطلق اطلاعات مورد نیاز برای شناسایی سکو را برگرداند.
تغییر یافته در نسخهی 3.8: در macOS، این تابع اکنون از
mac_ver()، اگر یک رشتهی انتشار غیرخالی برگرداند، برای دریافت نسخهی macOS بهجای نسخهی darwin استفاده میکند.
- platform.processor()¶
نام (واقعی) پردازنده را برمیگرداند، برای مثال
'amdk6'.اگر نتوان مقدار را تعیین کرد، یک رشته خالی برگردانده میشود. توجه داشته باشید که بسیاری از سکوها این اطلاعات را ارائه نمیدهند یا بهسادگی همان مقداری را برمیگردانند که برای
machine()برگردانده میشود. NetBSD این کار را انجام میدهد.
- platform.python_build()¶
یک تاپل
(buildno, builddate)برمیگرداند که شماره و تاریخ ساخت پایتون را بهصورت رشته مشخص میکند.
- platform.python_compiler()¶
رشتهای برمیگرداند که کامپایلر استفادهشده برای کامپایل کردن Python را شناسایی میکند.
- platform.python_branch()¶
رشتهای را برمیگرداند که شاخهی SCM پیادهسازی پایتون را مشخص میکند.
- platform.python_implementation()¶
رشتهای را برمیگرداند که پیادهسازی پایتون را شناسایی میکند. مقادیر بازگشتی ممکن عبارتند از: 'CPython'، 'IronPython'، 'Jython'، 'PyPy'.
- platform.python_revision()¶
رشتهای را برمیگرداند که بازبینی SCM پیادهسازی پایتون را مشخص میکند.
- platform.python_version()¶
نسخه پایتون را بهصورت رشته
'major.minor.patchlevel'برمیگرداند.توجه داشته باشید که برخلاف
sys.versionدر پایتون، مقدار بازگشتی همیشه شامل سطح وصله (patchlevel) خواهد بود (پیشفرض آن ۰ است).
- platform.python_version_tuple()¶
نسخه پایتون را بهصورت تاپلی از رشتهها به شکل
(major, minor, patchlevel)برمیگرداند.توجه داشته باشید که برخلاف
sys.versionدر پایتون، مقدار برگشتی همیشه شامل سطح وصله (patchlevel) خواهد بود (مقدار پیشفرض آن'0'است).
- platform.release()¶
نسخهی انتشار سیستم را برمیگرداند، مثلاً
'2.2.0'یا'NT'. اگر مقدار قابل تعیین نباشد، یک رشته خالی برگردانده میشود.در iOS و Android، این نسخه سیستمعامل قابلمشاهده برای کاربر است. برای دریافت نسخه هسته Darwin یا Linux، از
os.uname()استفاده کنید.
- platform.system()¶
نام سیستم/سیستمعامل را برمیگرداند، مانند
'Linux'،'Darwin'،'Java'،'Windows'. اگر مقدار قابل تعیین نباشد، یک رشته خالی برگردانده میشود.در iOS و Android، این تابع نام سیستمعامل قابلمشاهده برای کاربر (یعنی
'iOS،'iPadOS'یا'Android') را برمیگرداند. برای به دست آوردن نام هسته ('Darwin'یا'Linux')، ازos.uname()استفاده کنید.
- platform.system_alias(system, release, version)¶
(system, release, version)را با نامهای بازاریابی رایجِ استفادهشده برای برخی سیستمها، بهصورت نام مستعار بازمیگرداند. همچنین در برخی موارد که در غیر این صورت باعث سردرگمی میشد، ترتیب اطلاعات را تا حدی تغییر میدهد.
- platform.version()¶
نسخهی انتشار سیستم را بازمیگرداند، برای مثال
'#3 on degas'. اگر نتوان مقدار را تعیین کرد، یک رشتهی خالی بازمیگرداند.
- platform.uname()¶
رابط نسبتاً قابلحمل uname. یک
namedtuple()شامل شش ویژگی را برمیگرداند:system،node،release،version،machineوprocessor.processorبهصورت دیرهنگام و در صورت نیاز حل میشود.توجه: نام دو ویژگی نخست با نامهای ارائهشده توسط
os.uname()متفاوت است؛ در آنجا آنهاsysnameوnodenameنامیده میشوند.آیتمهایی که نمیتوان آنها را تعیین کرد، به
''تنظیم میشوند.تغییر یافته در نسخهی 3.3: نتیجه از یک تاپل به
namedtuple()تغییر یافت.تغییر یافته در نسخهی 3.9:
processorبهجای حل بلافاصله، با تأخیر حل میشود.
سکوی جاوا¶
- platform.java_ver(release='', vendor='', vminfo=('', '', ''), osinfo=('', '', ''))¶
رابط نسخه برای Jython.
یک تاپل
(release, vendor, vminfo, osinfo)برمیگرداند که در آن vminfo یک تاپل(vm_name, vm_release, vm_vendor)و osinfo یک تاپل(os_name, os_version, os_arch)است. مقادیری که نمیتوان آنها را تعیین کرد، به پیشفرضهایی که بهعنوان پارامتر داده شدهاند تنظیم میشوند (که همگی بهطور پیشفرض''هستند).منسوخ شده از نسخهی 3.13, در نسخهی 3.15 حذف خواهد شد: این تا حد زیادی آزمایشنشده بود، API گیجکنندهای داشت و فقط برای پشتیبانی از Jython مفید بود.
سکوی ویندوز¶
- platform.win32_ver(release='', version='', csd='', ptype='')¶
اطلاعات تکمیلی نسخه را از رجیستری ویندوز دریافت میکند و یک تاپل
(release, version, csd, ptype)برمیگرداند که به انتشار سیستمعامل، شمارهی نسخه، سطح CSD (سرویسپک) و نوع سیستمعامل (چند/تکپردازنده) اشاره دارد. مقادیری که قابل تعیین نباشند، به پیشفرضهای دادهشده بهعنوان پارامتر تنظیم میشوند (که پیشفرض همهی آنها یک رشتهی خالی است).بهعنوان یک راهنمایی: ptype در ماشینهای NT تکپردازندهای برابر
'Uniprocessor Free'و در ماشینهای چندپردازندهای برابر'Multiprocessor Free'است. عبارت'Free'به این معناست که نسخهی سیستمعامل فاقد کد اشکالزدایی است. همچنین ممکن است'Checked'باشد که به این معناست نسخهی سیستمعامل از کد اشکالزدایی استفاده میکند، یعنی کدی که آرگومانها، محدودهها و غیره را بررسی میکند.
- platform.win32_edition()¶
یک رشته برمیگرداند که نشاندهنده نسخه فعلی ویندوز است، یا اگر مقدار قابل تعیین نباشد
Noneبرمیگرداند. مقادیر ممکن شامل'Enterprise'،'IoTUAP'،'ServerStandard'و'nanoserver'هستند، اما به آنها محدود نمیشوند.اضافه شده در نسخهی 3.8.
- platform.win32_is_iot()¶
اگر ویرایش ویندوزی که
win32_edition()برمیگرداند بهعنوان یک ویرایش IoT شناخته شود،Trueبرمیگرداند.اضافه شده در نسخهی 3.8.
سکوی macOS¶
- platform.mac_ver(release='', versioninfo=('', '', ''), machine='')¶
اطلاعات نسخه macOS را دریافت میکند و آن را بهصورت یک تاپلبا قالب
(release, versioninfo, machine)برمیگرداند که versioninfo یک تاپل با قالب(version, dev_stage, non_release_version)است.آیتمهایی که نمیتوان آنها را تعیین کرد، به
''تنظیم میشوند. همهی آیتمهای تاپل از نوع رشته هستند.
سکوی iOS¶
- platform.ios_ver(system='', release='', model='', is_simulator=False)¶
اطلاعات نسخه iOS را دریافت میکند و آن را بهصورت یک
namedtuple()با ویژگیهای زیر برمیگرداند:systemنام سیستمعامل است؛ یا'iOS'یا'iPadOS'.releaseشماره نسخه iOS بهصورت یک رشته است (برای نمونه،'17.2').modelشناسهی مدل دستگاه است؛ این یک رشته مانند'iPhone13,2'برای یک دستگاه فیزیکی، یا'iPhone'در شبیهساز خواهد بود.is_simulatorیک بولی است که نشان میدهد برنامه روی شبیهساز اجرا میشود یا روی یک دستگاه فیزیکی.
ورودیهایی که قابل تعیین نیستند، به پیشفرضهایی که بهعنوان پارامتر داده شدهاند تنظیم میشوند.
سکوهای یونیکس¶
- platform.libc_ver(executable=sys.executable, lib='', version='', chunksize=16384)¶
تلاش میکند نسخه libc را که پرونده اجرایی (بهطور پیشفرض مفسر پایتون) به آن پیوند داده شده است تعیین کند. یک تاپل از رشتهها
(lib, version)برمیگرداند که در صورت ناموفق بودن جستجو، مقادیر پیشفرض آنها همان پارامترهای دادهشده خواهند بود.توجه داشته باشید که این تابع آگاهی دقیقی از چگونگی افزودن نمادها به پرونده اجرایی توسط نسخههای مختلف libc دارد و احتمالاً فقط برای پروندههای اجرایی کامپایلشده با gcc قابل استفاده است.
پرونده بهصورت تکههایی به اندازهی chunksize بایت خوانده و پویش میشود.
سکوهای لینوکسی¶
- platform.freedesktop_os_release()¶
شناسایی سیستمعامل را از پرونده
os-releaseدریافت میکند و آن را بهصورت یک دیکشنری برمیگرداند. پروندهos-releaseیک استاندارد freedesktop.org است و در بیشتر توزیعهای لینوکس در دسترس است. اندروید و توزیعهای مبتنی بر اندروید، یک استثنای قابلتوجه هستند.OSErrorیا زیرکلاسی از آن را پرتاب میکند، هنگامی که هیچکدام از/etc/os-releaseو/usr/lib/os-releaseقابل خواندن نباشند.در صورت موفقیت، تابع یک دیکشنری برمیگرداند که در آن کلیدها و مقدارها رشته هستند. در مقدارها، نویسههای خاصی مانند
"و$بدون علامت نقلقول هستند. فیلدهایNAME،IDوPRETTY_NAMEهمیشه طبق استاندارد تعریف شدهاند. تمام فیلدهای دیگر اختیاری هستند. فروشندگان میتوانند فیلدهای اضافی را بگنجانند.توجه داشته باشید که فیلدهایی مانند
NAME،VERSIONوVARIANTرشتههایی مناسب برای نمایش به کاربران هستند. برنامهها باید برای شناسایی توزیعهای لینوکس از فیلدهایی مانندID،ID_LIKE،VERSION_IDیاVARIANT_IDاستفاده کنند.مثال:
def get_like_distro(): info = platform.freedesktop_os_release() ids = [info["ID"]] if "ID_LIKE" in info: # ids are space separated and ordered by precedence ids.extend(info["ID_LIKE"].split()) return ids
اضافه شده در نسخهی 3.10.
پلتفرم اندروید¶
- platform.android_ver(release='', api_level=0, manufacturer='', model='', device='', is_emulator=False)¶
اطلاعات دستگاه اندروید را دریافت میکند. یک
namedtuple()با ویژگیهای زیر بازمیگرداند. مقادیری که قابل تعیین نباشند، به مقادیر پیشفرض دادهشده بهعنوان پارامتر تنظیم میشوند.release- نسخهی اندروید، بهصورت رشته (مثلاً"14").api_level- سطح API دستگاه در حال اجرا، بهصورت یک عدد صحیح (برای مثال34برای Android 14). برای دریافت سطح API که پایتون بر اساس آن ساخته شده است،sys.getandroidapilevel()را ببینید.manufacturer- نام سازنده.model- نام مدل – معمولاً نام بازاریابی یا شماره مدل.device- نام دستگاه – بهطور معمول شماره مدل یا نام رمزی.is_emulator- اگر دستگاه شبیهساز باشدTrue؛ اگر دستگاه فیزیکی باشدFalse.
گوگل فهرستی از نامهای شناختهشدهی مدل و دستگاه را نگهداری میکند.
اضافه شده در نسخهی 3.13.
کاربرد خط فرمان¶
همچنین میتوان platform را مستقیماً با استفاده از سوئیچ -m مفسر فراخوانی کرد:
python -m platform [--terse] [--nonaliased] [{nonaliased,terse} ...]
گزینههای زیر پذیرفته میشوند:
- --terse¶
اطلاعات مختصری را دربارهی سکو چاپ میکند. این معادل فراخوانی
platform.platform()با آرگومان terse تنظیمشده رویTrueاست.
- --nonaliased¶
اطلاعات پلتفرم را بدون استفاده از نام مستعار برای نام سیستم/سیستمعامل چاپ میکند. این معادل فراخوانی
platform.platform()با آرگومان aliased برابر باTrueاست.
همچنین میتوانید یک یا چند آرگومان جایگاهی (terse، nonaliased) را برای کنترل صریح قالب خروجی ارسال کنید. این آرگومانها مشابه گزینههای متناظر خود رفتار میکنند.