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.invalidate_caches()

نهانگاه داخلی اطلاعاتی مانند uname() را پاک کنید. این کار معمولاً زمانی مفید است که node() پلتفرم توسط یک فرآیند خارجی تغییر کرده باشد و لازم باشد مقدار به‌روزشده را بازیابی کنید.

اضافه شده در نسخه‌ی 3.14.

سکوی جاوا

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) را برای کنترل صریح قالب خروجی ارسال کنید. این آرگومان‌ها مشابه گزینه‌های متناظر خود رفتار می‌کنند.