प्रोसेस को समझना
जब आप विंडोज, मैक या लिनक्स पर प्रोग्राम कोड करते हैं और निष्पादित करते हैं, तो आपका ऑपरेटिंग सिस्टम एक प्रोसेस (सिंगल) बनाता है। यह CPU, RAM, डिस्क स्पेस जैसे सिस्टम रिसोर्सेज और ऑपरेटिंग सिस्टम के कर्नेल में डेटा संरचनाओं का उपयोग करता है। एक प्रोसेस अन्य प्रोसेसेज से अलग होता है - यह नहीं देख सकता कि अन्य प्रोसेस क्या कर रहे हैं या उनमें हस्तक्षेप नहीं कर सकता।
नोट: इस कोड को लिनक्स जैसे सिस्टम पर चलाना होगा। विंडोज पर चलाने पर एक्सेप्शन आ सकते हैं।ऑपरेटिंग सिस्टम के लक्ष्य
OS के मुख्य दो लक्ष्य हैं: प्रोसेस के काम को निष्पक्ष रूप से फैलाना और यूज़र के प्रति उत्तरदायी होना। ये सभी चल रहे प्रोसेसेज को ट्रैक करके, प्रत्येक को चलाने के लिए थोड़ा समय देकर और फिर दूसरे पर स्विच करके प्राप्त किए जाते हैं। आप टास्क मैनेजर (विंडोज), एक्टिविटी मॉनिटर (macOS), या लिनक्स में top कमांड जैसे ग्राफिकल इंटरफेस के साथ अपने प्रोसेसेज की स्थिति देख सकते हैं।
प्रोग्रामर होने के नाते, हम अपने प्रोग्राम से प्रोसेस डेटा एक्सेस कर सकते हैं। कैसे? बस स्टैंडर्ड लाइब्रेरी OS मॉड्यूल का उपयोग करके। मैं आपको कुछ उदाहरण दिखाऊंगा।
# यह स्क्रिप्ट केवल लिनक्स/यूनिक्स पर काम करती है
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()}")
एक नया सिस्टम प्रोसेस चलाना और स्पिन करना डेवलपर्स और सिस्टम एडमिनिस्ट्रेटर्स के लिए काफी उपयोगी हो सकता है जो विशिष्ट ऑपरेटिंग सिस्टम कार्यों को स्वचालित करना चाहते हैं।
पायथन में एक subprocess मॉड्यूल है, जो नए प्रोसेस स्पिन कर सकता है, प्रोसेसेज से जानकारी भेज और प्राप्त कर सकता है, और एरर और रिटर्न कोड भी संभाल सकता है।
आधिकारिक पायथन डॉक्यूमेंटेशन सिस्टम कमांड्स तक पहुंचने के लिए subprocess मॉड्यूल की सिफारिश करता है।
subprocess.call() फंक्शन कॉल की गई कमांड के समाप्त होने और आउटपुट पढ़ने का इंतजार करता है। हम सिस्टम की डिस्क स्पेस जानकारी निकालने के लिए नीचे कुछ उदाहरण देखेंगे।
उदाहरण: 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)
विस्तृत आउटपुट के लिए subprocess का उपयोग
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(discinfo.decode('utf-8'))
print(type(discinfo.decode('utf-8')))
content = discinfo.decode('utf-8').split("\n")
print(content)
main()