Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन में सबप्रोसेस मॉड्यूल का उपयोग कैसे करें?

समझने की प्रक्रिया -

जब आप विंडोज, मैक या लिनक्स पर प्रोग्राम को कोड और निष्पादित करते हैं, तो आपका ऑपरेटिंग सिस्टम एक प्रक्रिया (एकल) बनाता है। यह ऑपरेटिंग सिस्टम के कर्नेल में सीपीयू, रैम, डिस्क स्पेस और डेटा संरचनाओं जैसे सिस्टम संसाधनों का उपयोग करता है। एक प्रक्रिया अन्य प्रक्रियाओं से अलग होती है—यह नहीं देख सकती कि अन्य प्रक्रियाएं क्या कर रही हैं या उनमें हस्तक्षेप नहीं कर रही हैं।

नोट: इस कोड को लिनक्स पर सिस्टम्स की तरह चलाना होता है। विंडोज़ पर निष्पादित होने पर अपवाद फेंक सकते हैं।

ऑपरेटिंग सिस्टम के लक्ष्य -

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

  1. विंडोज़ पर पायथन का उपयोग कैसे करें

    सीखने और उपयोग करने के लिए सबसे अच्छी प्रोग्रामिंग भाषाओं में से एक के रूप में, इसमें कोई आश्चर्य की बात नहीं है कि लाखों नए कोडर्स अपना ध्यान पायथन का उपयोग करने के तरीके सीखने पर लगाते हैं। यह सभी प्रमुख ऑपरेटिंग सिस्टम पर उपलब्ध पायथन के समर्थन के साथ प्रवेश की एक कम बाधा प्रदान करता है, जिससे आप

  1. टाइटल बार को संपादित करने के लिए पायथन में टिंकर का उपयोग कैसे करें?

    Tkinter एक विंडो या फ्रेम बनाता है जो प्रोग्राम को निष्पादित करने के बाद दिखाई देता है। चूंकि टिंकर में सभी फ़ंक्शन और मॉड्यूल स्वतंत्र हैं, इसलिए हम विशेष रूप से विंडो विशेषताओं को अनुकूलित करने के लिए एक विशेष फ़ंक्शन का उपयोग कर सकते हैं। टिंकर प्रत्येक एप्लिकेशन के लिए एक डिफ़ॉल्ट रूट विंडो बना

  1. टिंकर पायथन में थ्रेड का उपयोग कैसे करें?

    Tkinter के साथ, हम थ्रेडिंग का उपयोग करके एक बार में कई फ़ंक्शन कॉल कर सकते हैं . यह किसी एप्लिकेशन में कुछ कार्यों का अतुल्यकालिक निष्पादन प्रदान करता है। पायथन में एक थ्रेड का उपयोग करने के लिए, हम थ्रेडिंग . नामक एक मॉड्यूल आयात कर सकते हैं और इसके थ्रेड . को उपवर्गित करें कक्षा। हमारी नई कक्षा