Reading and Writing with stdin and stdout

Python bilan Subprocesslar Ishga Tushirish.

SU

stdin va stdout bilan o‘qish va yozish

Keling, bugungi vazifangiz deb faraz qilaylik, sizga Linux serveringizda hozirda ishlayotgan jarayonlarni tekshiradigan va Python bilan ishlayotgan jarayonlarni chiqaradigan Python dasturini yozish vazifasi berilgan. Siz hozirda ishlayotgan jarayonlar ro‘yxatini olish uchun ps -ef komandasidan foydalanishingiz mumkin. Odatda siz bu komandani ishlatib, natijani grep komandasiga "pipe" qilib yuborasiz, bu esa fayllarda satrlarni qidirish uchun ishlatiladigan boshqa bir Linux komandasi.

Quyidagi to‘liq Linux komandasi yordamida buni amalga oshirishingiz mumkin:

ps -ef | grep python

Endi esa ushbu komandani Python yordamida subprocess moduli orqali qanday bajarish mumkinligini ko‘rib chiqamiz. Mana bir yo‘l:

import subprocess
 
cmd = ['ps', '-ef']
ps = subprocess.Popen(cmd, stdout=subprocess.PIPE)
 
cmd = ['grep', 'python']
grep = subprocess.Popen(
    cmd,
    stdin=ps.stdout,
    stdout=subprocess.PIPE,
    encoding='utf-8',
)
 
ps.stdout.close()
output, _ = grep.communicate()
python_processes = output.split('\n')
print(python_processes)

Ushbu kod ps -ef komandasini qayta yaratadi va subprocess.Popen yordamida uni chaqiradi. Komanda natijasini subprocess.PIPE orqali ushlaysiz.

grep komandasida uning stdin parametri ps komandasining chiqishiga o‘rnatiladi. Shuningdek, grep komandasining stdoutni ushlab, encodingni utf-8 qilib belgilaysiz.

Bu, asosan, ps komandasining natijasini olish va uni "pipe" yoki grep komandasiga yuborish vazifasini bajaradi.

Keyingi qadamda, ps komandasining stdoutini close() orqali yopasiz va grep komandasining communicate() metodidan foydalanib, grepning chiqishini olasiz.

Oxirgi qadamda, chiqishni satr bo‘yicha (\n) bo‘lib, barcha faol Python jarayonlarini ro‘yxatga olasiz. Agar hozirda hech qanday faol Python jarayoni ishlayotgan bo‘lmasa, natija bo‘sh ro‘yxat bo‘ladi.

Siz har doim ps -efni o‘zingiz ishga tushirishingiz va boshqa narsalarni qidirish uchun python o‘rniga boshqa satrni qo‘shib sinab ko‘rishingiz mumkin.

Last updated on

On this page

Xato haqida xabar berish