سطح مقدماتی (Beginner Level)
در برنامهنویسی پایتون، اغلب نیاز داریم بدانیم کدهای ما روی چه سیستمعاملی (Operating System) یا چه پلتفرمی در حال اجرا هستند. این موضوع زمانی اهمیت پیدا میکند که بخواهیم رفتارهای متفاوتی را برای ویندوز (Windows)، مک (macOS) یا لینوکس (Linux) تعریف کنیم. پایتون دو ماژول اصلی sys و platform را برای این کار ارائه میدهد.
۱. استفاده از ماژول sys
سادهترین و سریعترین راه برای تشخیص پلتفرم، استفاده از sys.platform است. این ویژگی یک رشته متنی برمیگرداند که شناسه سیستمعامل را نشان میدهد (مثلاً 'win32' برای ویندوز یا 'linux' برای لینوکس).
مثال اول: بررسی ساده پلتفرم
در این مثال، نام پلتفرم را چاپ میکنیم. این کد یک اسکریپت کامل است و خروجی میدهد.
مثال دوم: اجرای شرطی کد
معمولاً از sys.platform در ساختارهای شرطی استفاده میکنیم تا کدهای خاصی را فقط روی سیستمعاملهای خاص اجرا کنیم.
مثال سوم: تابع کمکی (Static)
این یک قطعه کد (Snippet) است که ممکن است در یک برنامه بزرگتر استفاده شود، اما به تنهایی فراخوانی نشده است.
import sys
def get_os_name():
"""
نام سیستمعامل را به صورت خوانا برمیگرداند.
"""
if sys.platform.startswith('win'):
return "Windows"
elif sys.platform.startswith('linux'):
return "Linux"
return "Other"
۲. استفاده از ماژول platform (مقدماتی)
ماژول platform اطلاعات دقیقتر و خواناتری نسبت به sys ارائه میدهد. تابع platform.system() نام سیستمعامل را به صورت استاندارد (مانند 'Windows', 'Linux', 'Darwin') برمیگرداند.

مثال اول: دریافت نام سیستمعامل و نسخه
این کد کاملاً اجرایی است و اطلاعات کلی سیستم را چاپ میکند.
مثال دوم: اطلاعات نسخه دقیقتر
گاهی نیاز داریم بدانیم دقیقا چه بیلد (Build) یا نسخهای نصب است.
سطح پیشرفته (Professional Level)
در سطح حرفهای، تنها دانستن نام سیستمعامل کافی نیست. ما نیاز داریم معماری پردازنده (۳۲ یا ۶۴ بیت)، نوع مفسر پایتون (CPython, PyPy, Jython) و جزئیات سختافزاری را بدانیم تا بتوانیم کدهای بهینه (Optimized) و پرتابل (Cross-Platform) بنویسیم.
۱. معماری پردازنده و سختافزار
توابع platform.machine() و platform.processor() نوع سختافزار را مشخص میکنند. همچنین برای تشخیص دقیق ۳۲ یا ۶۴ بیتی بودن پروسه پایتون، استفاده از ماژول struct دقیقتر از platform.architecture() عمل میکند (زیرا platform.architecture گاهی به فایل اجرایی اشاره میکند نه فضای آدرسدهی).
مثال اول: شناسایی معماری پردازنده
کد زیر اطلاعات سختافزاری ماشین را استخراج میکند.
مثال دوم: تشخیص دقیق بیت (Bit Depth) با struct
این روش حرفهایترین راه برای فهمیدن این است که پایتون شما به صورت ۳۲ بیتی اجرا میشود یا ۶۴ بیتی.
۲. اطلاعات مفسر پایتون (Python Implementation)
در محیطهای حرفهای، ممکن است کد شما روی PyPy (برای سرعت) یا Jython (برای جاوا) اجرا شود. ماژول platform توابعی برای شناسایی خودِ پایتون دارد.
مثال اول: نسخه و نوع کامپایلر پایتون
این اسکریپت جزئیات محیط اجرایی پایتون را نمایش میدهد.
مثال دوم: تابع بررسی سازگاری (Static)
این تابع بررسی میکند آیا نسخه پایتون برای اجرای یک ویژگی خاص مناسب است یا خیر (کد استاتیک).
import sys
def require_python_version(major, minor):
"""
بررسی میکند آیا نسخه پایتون حداقل مقدار مورد نظر است یا خیر.
"""
if sys.version_info < (major, minor):
raise EnvironmentError(f"Must use Python {major}.{minor} or higher")
۳. نوشتن کدهای Cross-Platform (چند پلتفرمی)
یکی از چالشهای اصلی برنامهنویسی حرفهای، مدیریت مسیر فایلها (File Paths) و کتابخانههای وابسته به سیستمعامل است. ویندوز از \ و یونیکس از / استفاده میکند.
نکته فنی:
برای مدیریت مسیرها همیشه از os.path.join یا کتابخانه مدرن pathlib استفاده کنید و هرگز جداکنندهها را دستی تایپ نکنید.
مثال اول: مدیریت مسیرها به روش صحیح
این کد نشان میدهد چگونه مسیری بسازیم که هم در ویندوز و هم در لینوکس کار کند.
مثال دوم: ایمپورتهای شرطی (Static)
گاهی اوقات نیاز دارید ماژولی را ایمپورت کنید که فقط در یک سیستمعامل وجود دارد (مانند msvcrt در ویندوز).
try:
# مخصوص ویندوز
import msvcrt
def get_key():
return msvcrt.getch()
except ImportError:
# مخصوص لینوکس/مک
import sys
import tty
import termios
def get_key():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
مثال سوم: بررسی متغیرهای محیطی مرتبط با پلتفرم
بررسی متغیرهای محیطی که در پلتفرمهای مختلف متفاوت هستند.