The subprocess.run() Function

Python bilan Subprocesslar Ishga Tushirish.

SU

subprocess.run() funksiyasi

run() funksiyasi Python 3.5 versiyasida qo‘shilgan. Bu funksiya subprocessdan foydalanish uchun tavsiya etilgan usul hisoblanadi.

Quyidagi tarzda ishlaydi:

Funksiya ta'rifiga qarash, uning qanday ishlashini yaxshiroq tushunishga yordam beradi:

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None,
capture_output=False, shell=False, cwd=None, timeout=None, check=False,
encoding=None, errors=None, text=None, env=None, universal_newlines=None)

run() funksiyasidan samarali foydalanish uchun, bu argumentlarning hammasi nima qiladi, degan ma'lumotga ega bo‘lishingiz shart emas. Aslida, ko‘pincha faqat birinchi argument va shellni yoqish yoki yoqmaslikni bilish kifoya qiladi. Boshqa argumentlar esa juda maxsus holatlar uchun foydalidir.

Keling, umumiy Linux / Mac komandalaridan biri bo‘lgan lsni ishlatib ko‘raylik. ls komandasining vazifasi — joriy papkada joylashgan fayllarni ro‘yxatini chiqarish. Standart holatda, ls siz hozirda bo‘lgan papkadagi fayllarni ro‘yxatlaydi. Subprocess yordamida uni ishga tushurish uchun quyidagi kodni ishlatish kerak:

import subprocess
subprocess.run(['ls'])

Natijada:

filename
CompletedProcess(args=['ls'], returncode=0)

Shuningdek, shell=True deb belgilash mumkin, bu komandani to‘g‘ridan-to‘g‘ri shell orqali ishga tushiradi. Ko‘pincha bunga hojat qolmaydi, ammo bu jarayonni yanada batafsil boshqarish va shell pipe’lari va yulduzcha belgilardan foydalanish zarurati tug‘ilganda foydalidir.

Agar komandadan olingan natijani saqlab, keyinchalik foydalanmoqchi bo‘lsangiz, qanday qilib buning mumkinligini ko‘rib chiqamiz!

Natijani olish

Ko‘pincha tashqi jarayondan natija olish va o‘sha ma'lumotlar bilan biror ish qilish kerak bo‘ladi. run() funksiyasidan natija olish uchun capture_output argumentini True qilib belgilashingiz mumkin:

subprocess.run(['ls', '-l'], capture_output=True)

Natija:

CompletedProcess(args=['ls', '-l'], returncode=0,
stdout=b'total 40\n-rw-r--r--@ 1 michael staff 17083 Apr 15 13:17 some_file\n',
stderr=b'')

Bu holatda natija juda ham foydali bo‘lmaydi, chunki qaytarilgan natijani o‘zgaruvchiga saqlamadingiz. Keling, kodni yangilab, natijani o‘zgaruvchiga saqlaymiz va shunda stdoutga kirishimiz mumkin:

output = subprocess.run(['ls', '-l'], capture_output=True)
print(output.stdout)

Natija:

b'total 40\n-rw-r--r--@ 1 michael staff 17083 Apr 15 13:17 some_file\n'

Natija CompletedProcess klassining obyektidir, bu orqali siz kiruvchi argumentlarni, subprocessning returncode qiymatini, shuningdek subprocessning stdout va stderr qiymatlarini olish imkoniyatiga ega bo‘lasiz.

returncode haqida keyinchalik batafsil o‘rganasiz. stderr ko‘pincha dasturlar xatolik xabarlarini chiqaradigan joy bo‘lsa, stdout esa dastur natijalarini chiqarish uchun ishlatiladi.

Agar qiziqsangiz, bu kod bilan tajriba qilib, shu atributlarda hozirda nimalar mavjudligini aniqlashingiz mumkin:

output = subprocess.run(['ls', '-l'], capture_output=True)
print(output.returncode)
print(output.stdout)
print(output.stderr)

Endi esa Popen haqida o‘rganishni davom ettiramiz.

Last updated on

On this page

Xato haqida xabar berish