Подпроцес.покрени метод
Подпроцес.рун метода узима листу аргумената. Када се метода позове, извршава наредбу и чека да се процес заврши, враћајући на крају објекат „ЦомплетедПроцесс“. Објект “ЦомплетедПроцесс” враћа стдоут, стдерр, оригиналне аргументе кориштене током позивања методе и повратни код. Стдоут се односи на ток података који је произвела наредба, док се стдерр односи на све грешке настале током извршавања програма. Било који повратни код који није нула (излазни код) значио би грешку у наредби која се извршава у потпроцесу.метода трчања.
Пример 1: Излазни садржај текстуалне датотеке која користи потпроцес.покрени метод
Доле наведена наредба ће дати садржај „података.ткт “, под претпоставком да садржи низ„ наме = Јохн “.
увозни потпроцеспотпроцес.рун (["мачка", "подаци.ткт "])
Покретање горњег кода вратиће следећи излаз:
име = ЈованЦомплетедПроцесс (аргс = ['мачка', 'подаци.ткт '], повратни код = 0)
Први елемент аргумента листе је име наредбе која се извршава. Било који елемент на листи који прати први елемент сматрају се опцијама или прекидачима командне линије. Можете да користите и једну црту и двоструку цртицу да бисте дефинисали опције. На пример, за навођење датотека и директоријума у директоријуму, код би био „подпроцес.покрени ([„лс“, „-л“] “. У већини ових случајева било који аргумент одвојен размаком у наредби љуске можете сматрати појединачним елементом на листи испорученој потпроцесу.метода трчања.
Пример 2: Сузбијање излаза потпроцеса.покрени метод
Да би се потиснуо излаз потпроцеса.рун метода, мораћете да наведете „стдоут = субпроцесс.ДЕВНУЛЛ “и„ стдерр = потпроцес.ДЕВНУЛЛ “као додатни аргументи.
увозни потпроцеспотпроцес.рун (["мачка", "подаци.ткт "], стдоут = потпроцес.ДЕВНУЛЛ,
стдерр = потпроцес.ДЕВНУЛЛ)
Покретање горњег кода даће следећи резултат:
ЦомплетедПроцесс (аргс = ['мачка', 'подаци.ткт '], повратни код = 0)Пример 3: Хватање резултата потпроцеса.покрени метод
Да ухвати излаз потпроцеса.метода извођења, користите додатни аргумент под називом „цаптуре_оутпут = Труе“.
увозни потпроцесизлаз = потпроцес.рун (["мачка", "подаци.ткт "], цаптуре_оутпут = Тачно)
испис (излаз)
Покретање горњег кода даће следећи резултат:
ЦомплетедПроцесс (аргс = ['мачка', 'подаци.ткт '], повратни код = 0,стдоут = б'наме = Јохн \ н ', стдерр = б ")
Можете појединачно да приступите вредностима стдоут и стдерр користећи „оутпут.стдоут “и„ оутпут.стдерр “методе. Излаз се производи као секвенца бајтова. Да бисте добили стринг као излаз, користите „оутпут.стдоут.метода декодирања („утф-8“). Такође можете да наведете „тект = Труе“ као додатни аргумент потпроцесу.покрените позив да бисте добили излаз у формату низа. Да бисте добили шифру статуса излаза, можете користити „излаз.повратни код ”метода.
Пример 4: Повећати изузетак у случају неуспеха команде извршене подпроцесом.покрени метод
Да бисте покренули изузетак када наредба изађе са статусом који није нула, користите аргумент „цхецк = Труе“.
увозни потпроцеспотпроцес.рун (["мачка", "подаци.тк "], цаптуре_оутпут = Труе, тект = Труе, цхецк = Труе)
Покретање горњег кода даће следећи резултат:
подићи ЦалледПроцессЕррор (ретцоде, процесс.аргс,потпроцес.ЦалледПроцессЕррор: Наредба '[' мачка ',' подаци.тк ']'
враћен статус излаза који није нула 1.
Пример 5: Проследи низ наредби коју извршава потпроцес.покрени метод
Можете предати низ наредби која ће се извршити потпроцесом.рун метода помоћу аргумента „инпут = 'стринг'“.
увозни потпроцесизлаз = потпроцес.рун (["цат"], инпут = "подаци.ткт ", цаптуре_оутпут = Тачно,
тект = Труе, цхецк = Труе)
испис (излаз)
Покретање горњег кода даће следећи резултат:
ЦомплетедПроцесс (аргс = ['цат'], ретурнцоде = 0, стдоут = "подаци.ткт ", стдерр =")Као што видите, горњи код преноси „податке.ткт ”као низ, а не као објекат датотеке. Да проследи „податке.ткт ”као датотеку, користите аргумент„ стдин ”.
са отвореним („подацима.ткт ") као ф:излаз = потпроцес.рун (["цат"], стдин = ф, цаптуре_оутпут = Труе,
тект = Труе, цхецк = Труе)
испис (излаз)
Покретање горњег кода даће следећи резултат:
ЦомплетедПроцесс (аргс = ['цат'], ретурнцоде = 0, стдоут = "наме = Јохн \ н", стдерр = ")Пример 6: Извршите команду директно у љусци помоћу потпроцеса.покрени метод
Могуће је покренути команду директно у љуску „каква јесте“, уместо да се користи стринг подељен у главној команди и опцијама које је прате. Да бисте то урадили, морате додати „схелл = Труе“ као додатни аргумент. Међутим, програмери питхон-а ово обесхрабрују јер коришћење „схелл = Труе“ може довести до сигурносних проблема. Овде можете прочитати више о безбедносним импликацијама.
увозни потпроцеспотпроцес.рун ("подаци мачке".ткт '", љуска = Тачно)
Покретање горњег кода даће следећи резултат:
име = ЈованЗакључак
Потпроцес.рун метода у Питхону је прилично моћна, јер вам омогућава да покрећете команде љуске унутар самог питхона. Ово помаже у ограничавању читавог кода на сам питхон, без потребе за додатним кодом скрипте љуске у одвојеним датотекама. Међутим, може бити прилично незгодно правилно означити команде љуске на питхон листи. Можете користити „схлек.метода сплит () ”за означавање једноставних команди љуске, али у дугим, сложеним наредбама - посебно онима са симболима цијеви - схлек не успије правилно подијелити наредбу. У таквим случајевима отклањање грешака може бити незгодно питање. Да бисте то избегли, можете користити аргумент „схелл = Труе“, али са овом радњом су повезани одређени безбедносни проблеми.