ماژول os یک روش قابل حمل برای از عملکردهای مستقل هر سیستم عامل را فراهم می کند. قابلیت هایی که این ماژول فراهم کرده است بسته به سیستم عاملی که پایتون بر روی آن نصب شده است، یا بر اساس استانداردهای POSIX و NT ممکن است متفاوت باشد.متدهای این ماژول نام یا مسیر یک فایل را به عنوان ورودی دریافت می کند. از این ماژول می توان برای کار بر روی فایل ها (ایجاد، تغییر نام فایل ها) و کار بر روی دایرکتوری ها و بدست آوردن اطلاعات و خصوصیات هر فایل استفاده کرد.

پیدا کردن نام و مشخصات سیستم عامل

پایتون از چند روش امکان پیدا کردن نام سیستمی عاملی که اسکریپت پایتون بر روی آن اجرا می شود را فراهم می کند. یکی از این روش ها استفاده از os.name است. خروجی آن شامل ۶ دسته سیستم عامل های مبتنی بر posix, nt, mac, os2, ce و java است.

متد ()uname با توجه به سیستم عامل اطلاعات مربوط به مشخصات سیستم عامل را نشان می دهد. فرمت خروجی این متد در نسخه های پایتون ۲ و ۳ متفاوت است ولی مقدار بازگشتی شامل پنج خصیصه در مورد سیستم عامل است که شامل موارد زیر است.

  • sysname : نام سیستم عامل را نشان می دهد. به طور مثال اگر سیستم عامل لینوکس باشد، linux و اگر مکینتاش باشد Darwin نشان داده می شود.
  • Nodename : نام هاست ماشین را نشان می دهد.
  • Release : نسخه هسته مورد استفاده در سیستم عامل را نشان می دهد. به طور مثال برای لینوکس می تواند 4.10.0-21-generic باشد.
  • Version : نسخه سیستم عامل را نشان می دهد. Machine : معماری سیستم عامل نصب شده (به طور مثال x86 یا x86-64) را نشان می دهد.

قطعه کد ۱ و ۲ به تریتب خروجی متد ()uname را در پایتون ۲ و ۳ نشان می دهند.

برای دسترسی به هر عنصر از ادیس صفر تا پنج استفاده شده است.

پیدا کردن لیستی از متغیرهای محیطی

در هر سیستم عامل برای اهداف خاص خود سیستم یا برنامه های جانبی امکان تعریف و مقدار دهی کردن متغیرهای محیطی را می دهد. برای نمایش تمامی یا موردی از این متغیرها می توان از os.environ استفاده کرد.

به طور مثال برای نمایش دادن دایرکتوری خانگی و متیغر PATH کاربر جاری، از دستور قطعه کد ۶ استفاده می شود.

تغییر و تعریف متغیر محیطی در پایتون

در صورتی که سیستم عامل از متد ()putenv پشتیبانی کند، می توان از این متد برای تنظیم (تعریف) یک متغیر محیطی جدید استفاده کرد. این متد ۲ پارامتر key و value را دریافت می کند که key اشاره به نام متغیر و value اشاره به مقدار رشته ای متغیر دارد. روش دیگر مقدار دهی مستقیم به متغیر به صورت زیر است. در مثال قطعه کد ۷ یک متغیر محیطی جدید به نام TEST_VAR درون اسکریپت پایتون تعریف می شود.

برای بررسی اینکه آیا یک متغیر درون فهرست os.environ قرار دارد می توان از عملگر in و not in به صورت قطعه کد ۵ استفاده کرد. در قطعه کد ۸ در خط ۱ چون متغیر TEST_VAR درون os.environ قرار دارد مقدار True برگشت داده می شود و در خطوط ۳ به بعد بررسی می شود که اگر متغیر ENV_VAR وجود نداشت، اضافه شود.

کار با دایرکتوری ها

متد ()listdir نام و یا مسیر یک دایرکتوری را دریافت می کند و یک لیست از محتویات درون دایرکتوری را بر می گرداند. اگر هیچ آرگومانی ارسال نشود، متد ()listdir لیست فایل ها و دایرکتوری های درون دایرکتوری جاری را بر می گرداند. در سیستم عامل های یونیکسی یک تک نقطه (.) نشان دهنده دایرکتوری جاری و یک دو نقطه (..) نشان دهنده دایرکتوری والد، دایرکتوری جاری است. در قطعه کد ۹ خطوط ۱ تا ۲ محتویات دایرکتوری جاری را نشان می دهد. خط ۳ محتویات والد دایرکتوری جاری و خط ۴ محتویات دایرکتوری etc/ را نشان می دهد.

برای پیدا کردن نام دایرکتوری جاری از متد ()getcwd استفاده می شود. بنابراین برای لیست کردن نام فایل ها و دایرکتوری های درون دایرکتوری جاری می توان از قطعه کد ۱۰ نیز استفاده کرد چون مقدار برگشتی متد ()getcwd نام مسیر دایرکتوری جاری است.

اگر بخواهیم یک سلسله از دایرکتوری ها را مانندtmp/new_dir1/new_dir2/ ایجاد کنیم، به طوری که می خواهیم دایرکتوری new_dir2 را درون دایرکتوری new_dir1 ایجاد کنیم ولی خود دایرکتوری new_dir1 نیز وجود ندارد و خود این دایرکتوری نیز باید ایجاد شود . در چنین حالتی نمی توان باید از متد ()makedirs استفاده کرد.

کار با فایل ها

از تابع ()open می توان برای ایجاد، باز کردن و تغییر فایل ها استفاده کرد. ماژول os عملکردهای اضافی را فراهم کرده است که می توان برای تغییر نام و پاک کردن فایل ها استفاده کرد. از متد ()rename برای تغییر نام دادن یک فایل استفاده می شود. آرگومان نخست نام فایل اص لی و آرگومان دوم نام جدید برای فایل است. در خط ۱ از قطعه کد ۱۷ از متد ()rename برای تغییر نام دایرکتوری dir1 به directory1 و تغییر نام فایل filename.txt به new_filename.txt استفاده شده است.

در قطعه کد ۱۸ نام تمامی فایل هایی که با config شروع می شود و با py. پایان می یابد را به new_filenameX.py تغییر می دهد که X عددی است که از صفر شروع می شود و تا تعداد فایل های دلخواه شمرده می شود.

بررسی مجوزهای یک فایل یا دایرکتوری

پیش از باز کردن فایل توسط تابع ()open، از متد ()access استفاده می شود تا بررسی شود که آیا کاربری که اسکریپت پایتون را اجرا می کند مجوز خواندن یا نوشتن یا اجرای فایل را دارد یا خیر. در سیستم عامل های یونیکسی سه مجوز خواندن، نوشتن و اجرا به مالک فایل، گروه مالک فایل و دیگران داده می شود. اکثر فایل های سیستمی توسط کاربران عادی و غیر root قابل خواندن هستند ولی هیچ کاربر عادی نمی تواند روی فایل بنویسد. همچنین به طور عادی یک کاربر عادی نمی تواند بر روی فایل های دیگران بنویسد و یا حتی نمی تواند فایل دیگران را بخواند.

بحث خواندن و نوشتن تنها مربوط به فایل ها نیست، بلکه مربوط به دایرکتوری ها می شود. اگر یک دایرکتوری فاقد مجوز خواندن باشد، نمی توان محتوای آنرا لیست کرد و اگر فاقد مجوز نوشتن باشد، نمی توان فایل یا دایرکتوری جدیدی را درون آن ایجاد کرد و یا نمی توان فایل یا دایرکتوری را از آن پاک کرد. متد ()access حداقل دو آرگومان path و mode را دریافت می کند. Path اشاره به نام یا مسیر فایل یا دایرکتوری دارد و آرگومان دوم می تواند یکی از چهار مورد F_OK, R_OK, W_OK و X_OK باشد.

  • F_OK برای بررسی اینکه آیا مسیر path وجود دارد یا نه. اگر مسیر وجود داشته باشد مقدار True و در غیر این صورت مقدار False برگشت داده می شود.
  • R_OK برای بررسی اینکه آیا مسیر path قابل خواندن است یا نه. اگر مسیر قابل خواندن باشد مقدار True و در غیر این صورت مقدار False برگشت داده می شود.
  • W_OK برای بررسی اینکه آیا مسیر path قابل نوشتن است یا نه. اگر مسیر قابل نوشتن باشد مقدار True و در غیر این صورت مقدار False برگشت داده می شود.
  • X_OK برای بررسی اینکه آیا مسیر path قابل اجرا است یا نه. اگر مسیر قابل اجرا باشد مقدار True و در غیر این صورت مقدار False برگشت داده می شود.

در مثال قطعه کد ۲۰ انواع مجوزها برای فایلی که مسیر آن در متغیر file_name ذخیره شده است بررسی می شود.

در مثال قطعه کد ۲۱ یک فایل بر روی سیستم فایل وجود دارد و در ابتدا بررسی می شود که آیا فایل قابل نوشتن است یا نه. اگر نتوان روی فایل نوشت، خطای خط ۳ نشان داده می شود. در غیر این صورت متن Hello Word درون آن نوشته می شود.

اجرای دستورهای سیستم عامل توسط پایتون

متد ()system یک رشته را که دستوری از سیستم عامل است را همراه آرگومان های آن دستور به عنوان ورودی دریافت می کند و سپس دستور را در یک زیر پوسته اجرا می کند. این متد تابع ()system زبان C را فراخوانی می کند بنابراین عملکرد و محددویت های مشابه این تابع را دارد. در یونیکس ها خروجی متد ()system کد وضعیت خروجی اجرای دستور است. اگر عدد عدد برگشتی صفر باشد، یعنی دستور به درستی اجرا شده است در غیر این صورت هر عدد دیگری نشان دهنده خطا در اجرای دستور است. در قطعه کد ۲۲ از متد ()system و دستور hostname برای پیدا کردن نام ماشینی که اسکریپت بر روی آن اجرا می شود، استفاده شده است. زمانی که دستور را اجرا کردید، عدد صفر به عنوان کد وضعیت خروجی و اجرای موفقیت آمیز دستور برگشت داده می شود.

همچنین در خط قطعه کد دستور ping به همراه آرگومان های آن به متد ()system ارسال شده اند.