समझने की प्रक्रिया -
जब आप विंडोज, मैक या लिनक्स पर प्रोग्राम को कोड और निष्पादित करते हैं, तो आपका ऑपरेटिंग सिस्टम एक प्रक्रिया (एकल) बनाता है। यह ऑपरेटिंग सिस्टम के कर्नेल में सीपीयू, रैम, डिस्क स्पेस और डेटा संरचनाओं जैसे सिस्टम संसाधनों का उपयोग करता है। एक प्रक्रिया अन्य प्रक्रियाओं से अलग होती है—यह नहीं देख सकती कि अन्य प्रक्रियाएं क्या कर रही हैं या उनमें हस्तक्षेप नहीं कर रही हैं।
नोट: इस कोड को लिनक्स पर सिस्टम्स की तरह चलाना होता है। विंडोज़ पर निष्पादित होने पर अपवाद फेंक सकते हैं।
ऑपरेटिंग सिस्टम के लक्ष्य -
OS के मुख्य दोहरे लक्ष्य प्रक्रिया के कार्य को निष्पक्ष रूप से फैलाना और उपयोगकर्ता के प्रति उत्तरदायी होना है। ये सभी चल रही प्रक्रियाओं का ट्रैक रखकर, प्रत्येक को चलाने के लिए थोड़ा समय देकर और फिर दूसरे पर स्विच करके प्राप्त किया जाता है। आप ग्राफिकल इंटरफेस के साथ अपनी प्रक्रियाओं की स्थिति देख सकते हैं जैसे कि विंडोज-आधारित कंप्यूटरों पर टास्क मैनेजर, मैक का एक्टिविटी मॉनिटर (मैकओएस), या लिनक्स में शीर्ष कमांड।
एक प्रोग्रामर होने के नाते, हम अपने प्रोग्राम से प्रोसेस डेटा को एक्सेस कर सकते हैं। लेकिन कैसे? बस मानक पुस्तकालय ओएस मॉड्यूल का उपयोग करके। मैं आपको कुछ उदाहरण दिखाऊंगा।
# 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)
आउटपुट
<_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