The subprocess.Popen.communicate() Function

Python bilan Subprocesslar Ishga Tushirish.

SU

subprocess.Popen.communicate() funksiyasi

Ba'zan siz yaratgan jarayon bilan muloqot qilish zarur bo‘ladi. Popen.communicate() metodidan foydalangan holda, siz jarayonga ma'lumot yuborishingiz va undan ma'lumot olishingiz mumkin.

Ushbu bo‘limda biz faqat ma'lumot olish uchun communicate() funksiyasini ishlatamiz. Keling, ifconfig komandasini ishlatib, kompyuteringizning tarmoq kartasi haqida ma'lumot olishni ko‘rib chiqamiz. Linux yoki Mac tizimlarida ifconfig komandasini ishlatish mumkin, Windowsda esa ipconfigni ishlatish kerak. E'tibor bering, ushbu komandada operatsion tizimingizga qarab, faqat bitta harf farqi bor.

Quyidagi kodni ko‘rib chiqing:

import subprocess
cmd = ['ifconfig']
process = subprocess.Popen(
    cmd,
    stdout=subprocess.PIPE,
    encoding='utf-8',
)
data = process.communicate()
print(data[0])

Natija:

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
XHC20: flags=0<> mtu 0
# -------- truncated --------

Ushbu kod oldingi kodga qaraganda biroz boshqacha tarzda sozlangan. Keling, har bir qismini batafsil ko‘rib chiqamiz. Birinchi e'tibor berishingiz kerak bo‘lgan narsa — stdout parametrini subprocess.PIPE ga o‘rnatganingizdir. Bu jarayonning stdoutga yuborgan barcha ma'lumotlarni ushlash imkonini beradi. Shuningdek, encodingni utf-8 qilib belgilaysiz. Buning sababi, subprocess.Popen chaqiruvi odatda baytlar (bytes) qaytaradi, biz esa natijani o‘qish osonroq bo‘lishi uchun matn (string) shaklida olishni xohlaymiz.

Keyingi qadam — communicate() metodini chaqirish, bu jarayonning ma'lumotlarini ushlab, qaytaradi. communicate() metodi stdout va stderrni qaytaradi, shuning uchun natija tuple (juftlik) sifatida qaytadi. Bu yerda stderrni ushlamaganingiz uchun, u None bo‘ladi.

Oxirgi qadamda esa ma'lumotni ekranga chiqarasiz. Natija ancha uzun bo‘lgani uchun, bu yerda u qisqartirilgan.

Endi esa subprocess yordamida qanday qilib o‘qish va yozishni ko‘rib chiqamiz!

Last updated on

On this page

Xato haqida xabar berish