প্রক্রিয়া বোঝা -
আপনি যখন উইন্ডোজ, ম্যাক বা লিনাক্সে একটি প্রোগ্রাম কোড এবং এক্সিকিউট করেন, তখন আপনার অপারেটিং সিস্টেম একটি প্রসেস তৈরি করে একটি প্রক্রিয়া অন্যান্য প্রক্রিয়া থেকে বিচ্ছিন্ন হয়—এটি অন্য প্রক্রিয়াগুলি কী করছে বা তাদের সাথে হস্তক্ষেপ করছে তা দেখতে পারে না।
দ্রষ্টব্য: এই কোড লিনাক্সে sytems এর মত চালাতে হবে। উইন্ডোজে এক্সিকিউট করলে ব্যতিক্রম হতে পারে।
অপারেটিং সিস্টেমের লক্ষ্য -
OS-এর প্রধান দুটি লক্ষ্য হল প্রক্রিয়াটির কাজকে ন্যায্যভাবে ছড়িয়ে দেওয়া এবং ব্যবহারকারীর কাছে প্রতিক্রিয়াশীল হওয়া। এগুলি সমস্ত চলমান প্রক্রিয়াগুলির একটি ট্র্যাক রেখে, প্রতিটিকে চালানোর জন্য একটু সময় দেওয়ার এবং তারপরে অন্যটিতে স্যুইচ করার মাধ্যমে অর্জন করা হয়। উইন্ডোজ-ভিত্তিক কম্পিউটারে টাস্ক ম্যানেজার, ম্যাকের অ্যাক্টিভিটি মনিটর (macOS), বা লিনাক্সের শীর্ষ কমান্ডের মতো গ্রাফিকাল ইন্টারফেসের সাহায্যে আপনি আপনার প্রক্রিয়াগুলির অবস্থা দেখতে পারেন৷
একজন প্রোগ্রামার হওয়ার কারণে, আমরা আমাদের নিজস্ব প্রোগ্রাম থেকে প্রক্রিয়া ডেটা অ্যাক্সেস করতে পারি। কিন্তু কিভাবে? সাধারণ লাইব্রেরি ওএস মডিউল ব্যবহার করে। আমি আপনাকে কয়েকটি উদাহরণ দেখাব।
# This script works only on linux/unix
import os
print(f" *** Process ID - {os.getpid()}")
print(f" *** My User ID - {os.getuid()} and My Group ID - {os.getgid()} ")
print(f" *** Current Working Directory is - {os.getcwd()}") একটি নতুন সিস্টেম প্রক্রিয়া চালানো এবং স্পিন আপ করা ডেভেলপার এবং সিস্টেম অ্যাডমিনিস্ট্রেটরদের জন্য বেশ উপযোগী হতে পারে যারা নির্দিষ্ট অপারেটিং সিস্টেমের কাজগুলিকে স্বয়ংক্রিয় করতে চান৷
পাইথনের একটি সাবপ্রসেস মডিউল রয়েছে, যা একটি নতুন প্রক্রিয়া ঘোরাতে পারে, প্রক্রিয়াগুলি থেকে তথ্য পাঠাতে এবং গ্রহণ করতে পারে এবং ত্রুটি এবং রিটার্ন কোডগুলি পরিচালনা করতে পারে৷
অফিসিয়াল পাইথন ডকুমেন্টেশন সিস্টেম কমান্ড অ্যাক্সেস করার জন্য সাবপ্রসেস মডিউল সুপারিশ করে।
সাবপ্রসেস কল() ফাংশন আউটপুট পড়া শেষ করার জন্য কল কমান্ডের জন্য অপেক্ষা করে। সিস্টেমের ডিস্ক স্পেস তথ্য বের করার জন্য আমরা নীচে কয়েকটি উদাহরণ দেখতে পাব।
নিচের কোডটি df -h কমান্ড চালাবে এবং তথ্য ক্যাপচার করবে। আউটপুটটি পরবর্তী প্রক্রিয়াকরণের জন্য একটি পান্ডাস ডেটাফ্রেমে ক্যাপচার করা হয়।
উদাহরণ
# python code to create a subprocess for extracting disk space on linux using df -h
from io import StringIO
import pandas as pd
import subprocess
import ast
diskspace = "df"
diskspace_arg = "-h"
sp = subprocess.Popen([diskspace,diskspace_arg], stdout=subprocess.PIPE)
b = StringIO(sp.communicate()[0].decode('utf-8'))
df = pd.read_csv(b, sep=",")
print(df) আউটপুট
0x7ff67ef52798 এ<_io.StringIO object at 0x7ff67ef52798> Filesystem Size Used Avail Use% Mounted on 0 devtmpfs 7.8G 0 7.8G 0% /dev 1 tmpfs 7.8G 0 7.8G 0% /dev/shm 2 tmpfs 7.8G 33M 7.8G 1% /run 3 tmpfs 7.8G 0 7.8G 0% /sys/fs/... 4 /dev/xvda2 20G 16G 4.3G 79% / 5 /dev/xvdb 246G 16G 218G 7% /tdm 6 tmpfs 1.6G 0 1.6G 0% /run/use...
সাবপ্রসেস সহ আরো বিস্তারিত আউটপুট পেতে নিচের কোডটি দেখুন।
উদাহরণ
from io import StringIO
import pandas as pd
import subprocess
def uname_func():
uname = "uname"
uname_arg = "-a"
user_info = subprocess.call([uname, uname_arg])
return user_info
def disk_func():
diskspace = "pydf"
diskspace_arg = "-a"
discinfo_df = diskspace
stdout = subprocess.check_output([diskspace, diskspace_arg])
return stdout
def main():
userinfo = uname_func()
discinfo = disk_func()
print("Displaying values now... ")
# print(stdout.decode('utf-8'))
print(discinfo.decode('utf-8'))
print(type(discinfo.decode('utf-8')))
content = discinfo.decode('utf-8').split("\n")
print(content)
main() আউটপুট
Linux ip-00-000-00-000.xxxx.xxxx.xx.xx 0.00.0-000.el7.x86_64 #1 SMP Tue Aug 18 14:50:17 EDT 2020 x86_64 x86_64 x86_64 GNU/Linux Displaying values now... Filesystem Size Used Avail Use% Mounted on /dev/xvda2 20G 16G 4318M 78.9 [#####.] / devtmpfs 7918M 0 7918M 0.0 [......] /dev hugetlbfs 0 0 0 - [......] /dev/hugepages mqueue 0 0 0 - [......] /dev/mqueue devpts 0 0 0 - [......] /dev/pts tmpfs 7942M 0 7942M 0.0 [......] /dev/shm proc 0 0 0 - [......] /proc binfmt_misc 0 0 0 - [......] /proc/sys/fs/binfmt_misc tmpfs 7942M 32M 7909M 0.4 [......] /run tmpfs 1588M 0 1588M 0.0 [......] /run/user/1000 sysfs 0 0 0 - [......] /sys tmpfs 7942M 0 7942M 0.0 [......] /sys/fs/cgroup cgroup 0 0 0 - [......] /sys/fs/cgroup/blkio cgroup 0 0 0 - [......] /sys/fs/cgroup/cpu,cpuacct cgroup 0 0 0 - [......] /sys/fs/cgroup/cpuset cgroup 0 0 0 - [......] /sys/fs/cgroup/devices cgroup 0 0 0 - [......] /sys/fs/cgroup/freezer cgroup 0 0 0 - [......] /sys/fs/cgroup/hugetlb cgroup 0 0 0 - [......] /sys/fs/cgroup/memory cgroup 0 0 0 - [......] /sys/fs/cgroup/net_cls,net_prio cgroup 0 0 0 - [......] /sys/fs/cgroup/perf_event cgroup 0 0 0 - [......] /sys/fs/cgroup/pids cgroup 0 0 0 - [......] /sys/fs/cgroup/systemd pstore 0 0 0 - [......] /sys/fs/pstore configfs 0 0 0 - [......] /sys/kernel/config debugfs 0 0 0 - [......] /sys/kernel/debug securityfs 0 0 0 - [......] /sys/kernel/security /dev/xvdb 246G 16G 218G 6.4 [......] /tdm