Питхон

Како извршавати наредбе љуске у Питхону помоћу методе извршавања подпроцеса

Како извршавати наредбе љуске у Питхону помоћу методе извршавања подпроцеса
Подпроцес је уграђени Питхон модул који се може користити за стварање нових процеса и интеракцију са њиховим улазним и излазним токовима података. Једноставније речено, можете га користити за покретање команди љуске и покретање извршних бинарних датотека које су обично раштркане у разним директоријумима "бин" широм система датотека Линук. Такође можете доставити потпуну путању до извршне бинарне датотеке и користити било које прекидаче командне линије повезане са бинарним. Овај чланак ће објаснити како се користи модул потпроцеса и његова метода покретања у апликацијама Питхон. Сви узорци кода у чланку тестирани су са Питхон 3.8.2 на Убунту 20.04.

Подпроцес.покрени метод

Подпроцес.рун метода узима листу аргумената. Када се метода позове, извршава наредбу и чека да се процес заврши, враћајући на крају објекат „ЦомплетедПроцесс“. Објект “ЦомплетедПроцесс” враћа стдоут, стдерр, оригиналне аргументе кориштене током позивања методе и повратни код. Стдоут се односи на ток података који је произвела наредба, док се стдерр односи на све грешке настале током извршавања програма. Било који повратни код који није нула (излазни код) значио би грешку у наредби која се извршава у потпроцесу.метода трчања.

Пример 1: Излазни садржај текстуалне датотеке која користи потпроцес.покрени метод

Доле наведена наредба ће дати садржај „података.ткт “, под претпоставком да садржи низ„ наме = Јохн “.

увозни потпроцес
потпроцес.рун (["мачка", "подаци.ткт "])

Покретање горњег кода вратиће следећи излаз:

име = Јован
ЦомплетедПроцесс (аргс = ['мачка', 'подаци.ткт '], повратни код = 0)

Први елемент аргумента листе је име наредбе која се извршава. Било који елемент на листи који прати први елемент сматрају се опцијама или прекидачима командне линије. Можете да користите и једну црту и двоструку цртицу да бисте дефинисали опције. На пример, за навођење датотека и директоријума у ​​директоријуму, код би био „подпроцес.покрени ([„лс“, „-л“] “. У већини ових случајева било који аргумент одвојен размаком у наредби љуске можете сматрати појединачним елементом на листи испорученој потпроцесу.метода трчања.

Пример 2: Сузбијање излаза потпроцеса.покрени метод

Да би се потиснуо излаз потпроцеса.рун метода, мораћете да наведете „стдоут = субпроцесс.ДЕВНУЛЛ “и„ стдерр = потпроцес.ДЕВНУЛЛ “као додатни аргументи.

увозни потпроцес
потпроцес.рун (["мачка", "подаци.ткт "], стдоут = потпроцес.ДЕВНУЛЛ,
стдерр = потпроцес.ДЕВНУЛЛ)

Покретање горњег кода даће следећи резултат:

ЦомплетедПроцесс (аргс = ['мачка', 'подаци.ткт '], повратни код = 0)

Пример 3: Хватање резултата потпроцеса.покрени метод

Да ухвати излаз потпроцеса.метода извођења, користите додатни аргумент под називом „цаптуре_оутпут = Труе“.

увозни потпроцес
излаз = потпроцес.рун (["мачка", "подаци.ткт "], цаптуре_оутпут = Тачно)
испис (излаз)

Покретање горњег кода даће следећи резултат:

ЦомплетедПроцесс (аргс = ['мачка', 'подаци.ткт '], повратни код = 0,
стдоут = б'наме = Јохн \ н ', стдерр = б ")

Можете појединачно да приступите вредностима стдоут и стдерр користећи „оутпут.стдоут “и„ оутпут.стдерр “методе. Излаз се производи као секвенца бајтова. Да бисте добили стринг као излаз, користите „оутпут.стдоут.метода декодирања („утф-8“). Такође можете да наведете „тект = Труе“ као додатни аргумент потпроцесу.покрените позив да бисте добили излаз у формату низа. Да бисте добили шифру статуса излаза, можете користити „излаз.повратни код ”метода.

Пример 4: Повећати изузетак у случају неуспеха команде извршене подпроцесом.покрени метод

Да бисте покренули изузетак када наредба изађе са статусом који није нула, користите аргумент „цхецк = Труе“.

увозни потпроцес
потпроцес.рун (["мачка", "подаци.тк "], цаптуре_оутпут = Труе, тект = Труе, цхецк = Труе)

Покретање горњег кода даће следећи резултат:

подићи ЦалледПроцессЕррор (ретцоде, процесс.аргс,
потпроцес.ЦалледПроцессЕррор: Наредба '[' мачка ',' подаци.тк ']'
враћен статус излаза који није нула 1.

Пример 5: Проследи низ наредби коју извршава потпроцес.покрени метод

Можете предати низ наредби која ће се извршити потпроцесом.рун метода помоћу аргумента „инпут = 'стринг'“.

увозни потпроцес
излаз = потпроцес.рун (["цат"], инпут = "подаци.ткт ", цаптуре_оутпут = Тачно,
тект = Труе, цхецк = Труе)
испис (излаз)

Покретање горњег кода даће следећи резултат:

ЦомплетедПроцесс (аргс = ['цат'], ретурнцоде = 0, стдоут = "подаци.ткт ", стдерр =")

Као што видите, горњи код преноси „податке.ткт ”као низ, а не као објекат датотеке. Да проследи „податке.ткт ”као датотеку, користите аргумент„ стдин ”.

са отвореним („подацима.ткт ") као ф:
излаз = потпроцес.рун (["цат"], стдин = ф, цаптуре_оутпут = Труе,
тект = Труе, цхецк = Труе)
испис (излаз)

Покретање горњег кода даће следећи резултат:

ЦомплетедПроцесс (аргс = ['цат'], ретурнцоде = 0, стдоут = "наме = Јохн \ н", стдерр = ")

Пример 6: Извршите команду директно у љусци помоћу потпроцеса.покрени метод

Могуће је покренути команду директно у љуску „каква јесте“, уместо да се користи стринг подељен у главној команди и опцијама које је прате. Да бисте то урадили, морате додати „схелл = Труе“ као додатни аргумент. Међутим, програмери питхон-а ово обесхрабрују јер коришћење „схелл = Труе“ може довести до сигурносних проблема. Овде можете прочитати више о безбедносним импликацијама.

увозни потпроцес
потпроцес.рун ("подаци мачке".ткт '", љуска = Тачно)

Покретање горњег кода даће следећи резултат:

име = Јован

Закључак

Потпроцес.рун метода у Питхону је прилично моћна, јер вам омогућава да покрећете команде љуске унутар самог питхона. Ово помаже у ограничавању читавог кода на сам питхон, без потребе за додатним кодом скрипте љуске у одвојеним датотекама. Међутим, може бити прилично незгодно правилно означити команде љуске на питхон листи. Можете користити „схлек.метода сплит () ”за означавање једноставних команди љуске, али у дугим, сложеним наредбама - посебно онима са симболима цијеви - схлек не успије правилно подијелити наредбу. У таквим случајевима отклањање грешака може бити незгодно питање. Да бисте то избегли, можете користити аргумент „схелл = Труе“, али са овом радњом су повезани одређени безбедносни проблеми.

Топ 5 ергономских производа за рачунарски миш за Линук
Да ли дуготрајна употреба рачунара изазива бол у зглобу или прстима? Патите ли од укочених зглобова и стално морате да се рукујете? Да ли осећате гору...
Како променити поставке миша и додирне табле помоћу Ксинпут-а у Линук-у
Већина Линук дистрибуција подразумевано испоручује библиотеку „либинпут“ за обраду улазних догађаја на систему. Може да обрађује улазне догађаје и на ...
Замените тастере миша другачије за различити софтвер помоћу Кс-Моусе Буттон Цонтрол
Можда вам је потребан алат који би могао да промени контролу миша са сваком апликацијом коју користите. Ако је то случај, можете испробати апликацију ...