Питхон Субпроцесс.Попен Примери

Pithon Subprocess Popen Primeri



Питхон подпроцес је један од корисних модула који се користи за покретање различитих команди љуске, процеса и извршавање друге скрипте или извршних датотека помоћу Питхон скрипте. Може се користити и за преусмеравање података из једног процеса у други процес и руковање грешкама које генеришу подређени процеси. Модул подпроцеса има много класа које се користе у различите сврхе. Класа “подпроцес.Попен” је једна од класа овог модула која се користи за интеракцију са спољним процесима и обављање различитих типова задатака међу процесима. Вишеструка употреба класе “субпроцесс.Попен” у Питхон скрипти је приказана у овом водичу.

Тема садржаја:

  1. Покрените једноставну Линук команду
  2. Покрените команду са улазним подацима
  3. Покрените Питхон скрипт
  4. Руковати грешком подпроцеса
  5. Вратите код подпроцеса.Попен
  6. Преусмерите излаз потпроцеса у датотеку
  7. Мултипроцессинг Усинг Субпроцесс.Попен
  8. Управљајте улазним и излазним током с
  9. Контролишите временско ограничење и кашњење
  10. Прочитајте улаз за стримовање

Покрените једноставну Линук команду

Команда „датум“ се користи за приказ тренутног системског датума и времена. Направите Питхон датотеку са следећом скриптом која креира подпроцес који извршава команду „датум“ и одштампајте излаз ове команде:

#Увезите модул

увоз подпроцес

#Дефинишите команду за потпроцес и

#отвори процес помоћу функције Попен().

излаз = подпроцес . Попен ( [ 'датум' ] , стдоут = подпроцес . ЦЕВ )

#Преузмите излаз и грешку комуницирањем са процесом

стдоут , стдерр = излаз. комуницирати ( )

#Одштампајте излаз

принт ( стдоут. декодирати ( ) )

Излаз:







Следећи излаз се појављује након извршавања претходне скрипте:



  п1



Иди на врх





Покрените команду са улазним подацима

Команда „вц“ са опцијом „-ц“ се користи за пребројавање укупног броја знакова вредности стринга који је обезбеђен са овом командом. Направите Питхон датотеку са следећом скриптом која креира подпроцес са функцијом Попен() за покретање команди „вц –ц“. Вредност стринга се узима са терминала након извршавања скрипте и укупни карактери улазног низа се штампају у излазу.

#Увезите модул

увоз подпроцес

#Дефинишите команду за потпроцес и

#Отворите процес помоћу функције Попен().

излаз = подпроцес . Попен ( [ 'Тоалет' , '-ц' ] , стдоут = подпроцес . ЦЕВ )

#Преузмите излаз и грешку комуницирањем са процесом

стдоут , стдерр = излаз. комуницирати ( )

#Одштампајте излаз

принт ( стдоут. декодирати ( ) )

Излаз:



Следећи излаз се појављује за улазну вредност „Питхон Субпроцесс Екамплес“:

Иди на врх

Покрените Питхон скрипт

Направите Питхон датотеку под називом „сум.пи“ са следећом скриптом која израчунава збир два броја и ови бројеви су дати као аргументи командне линије:

сум.пи

#Увезите неопходан модул

увоз сис

#Број укупних аргумената

н = само ( сис . аргв )

#Додајте прве две вредности аргумента

сум = инт ( сис . аргв [ 1 ] ) + инт ( сис . аргв [ 2 ] )

#Одштампајте резултат сабирања

принт ( 'Збир ' + сис . аргв [ 1 ] + ' и ' + сис . аргв [ 2 ] + 'је' , сум )

Направите Питхон фајл са следећу скрипту која ће покренути Питхон фајл назван сум . пи са два аргумента стварањем а подпроцес .

#Увезите модул

увоз подпроцес

#Покрени питхон скрипту у подпроцесу и

#отворите процес помоћу функције Попен().

излаз = подпроцес . Попен ( [ 'питхон3' , 'сум.пи' , '25' , '55' ] , стдоут = подпроцес . ЦЕВ ) #Преузмите излаз и грешку комуницирањем са процесом

стдоут , стдерр = излаз. комуницирати ( )

#Одштампајте излаз

принт ( стдоут. декодирати ( ) )

Излаз:

Следећи излаз се појављује након извршавања претходне скрипте:

Иди на врх

`

Руковати грешком подпроцеса

Направите Питхон датотеку са следећом скриптом која обрађује грешке подпроцеса користећи блок „покушај-изузев“. Команда се преузима од корисника и извршава је подпроцес. Порука о грешци се приказује ако је било која неважећа команда узета од корисника.

#Увезите модуле

увоз подпроцес

увоз сис

#Преузми команду од корисника

команда = улазни ( 'Унесите исправну команду: ' )

покушати :

#Отворите процес помоћу функције Попен().

излаз = подпроцес . Попен ( [ команда ] , стдоут = подпроцес . ЦЕВ )

#Преузмите излаз и грешку комуницирањем са процесом

стдоут , стдерр = излаз. комуницирати ( )

#Одштампајте излаз

принт ( стдоут. декодирати ( ) )

осим :

принт ( „Грешка:“ , сис . екц_инфо ( ) )

Излаз:

Следећи излаз се појављује ако се команда „пвд“ узме као улаз који је важећа команда:

  п4-1

Следећи излаз се појављује ако се команда „уср“ узме као улаз који је важећа команда:

  п4-2

Иди на врх

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

Направите Питхон датотеку са следећом скриптом која извршава команду „лс“ кроз подпроцес да бисте добили листу свих Питхон датотека са тренутне локације. Скрипта чека да заврши потпроцес и штампа повратни код.

#Увезите модуле

увоз подпроцес

увоз сис

#Подесите команду

команда = [ 'лс' , '-л' , '*.пи' ]

покушати :

#Отворите процес помоћу функције Попен().

излаз = подпроцес . Попен ( команда , стдоут = подпроцес . ЦЕВ ,

стдерр = подпроцес . ЦЕВ , текст = Истина )

#Сачекајте да завршите процес

ретЦоде = излаз. чекати ( )

#Одштампајте повратни код

принт ( „Повратни код:“ , ретЦоде )

осим :

#Одштампај поруку о грешци за погрешно

принт ( „Грешка:“ , сис . екц_инфо ( ) )

Излаз:

Сличан излаз се појављује након извршавања претходне скрипте:

Иди на врх

Преусмерите излаз потпроцеса у датотеку

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

#Увоз модул

увоз подпроцес

#Дефинишите име датотеке

назив документа = 'оутфиле.ткт'

#Преузми пинг команду

цмд = улазни ( 'Унесите пинг команду: ' )

#Поделите преузети унос на основу простора

аргс = цмд . разделити ( )

#Напишите излаз команде у датотеку

са отворен ( назив документа , 'у' ) као застарели подаци:

процес = подпроцес . Попен ( аргс , стдоут = оутдата )

#Сачекајте да се процес заврши

ретурн_цоде = процес. чекати ( )

Излаз:

Према следећем излазу, „пинг -ц 3 Д8Б99Ф68Б208Б5453Б391ЦБ0Ц6Ц3Д6А9824Ф3Ц3А ” команда је преузета од корисника, а команда “цат” се користи за приказ садржаја датотеке коју је написао подпроцес:

Иди на врх

Мултипроцессинг Усинг Субпроцесс.Попен

Направите Питхон датотеку са следећом скриптом у којој је употреба вишепроцесирања приказана коришћењем подпроцеса. Овде се функција под називом дисплаи_мсг() позива више пута користећи вишеструку обраду.

#Увезите потребне модуле

увоз мултипроцесирање

увоз подпроцес

#Дефинишите функцију која ће бити позвана мултипроцесирањем

деф дисплаи_мсг ( н ) :

#Дефинишите команду помоћу функције формат().

цмд = 'ецхо 'Питхон програмирање'' . формату ( н )

#Отворите процес помоћу функције Попен().

процес = подпроцес . Попен ( цмд , шкољка = Истина , стдоут = подпроцес . ЦЕВ )

#Преузмите излаз и грешку комуницирањем са процесом

стдоут , грешка = процес. комуницирати ( )

#Одштампајте излаз

принт ( стдоут. декодирати ( ) )

#Позовите функцију 5 пута креирањем мултипроцессинг.Поол

са мултипроцесирање. Поол ( мултипроцесирање. цпу_цоунт ( ) ) као мп:

#Мапирајте функцију

мп. Мапа ( дисплаи_мсг , домет ( 1 , 5 ) )

Излаз:

Следећи излаз се појављује након извршавања претходне скрипте:

Иди на врх

Управљајте улазним и излазним токовима

Направите текстуалну датотеку под називом „тест.ткт“ са следећим садржајем пре него што креирате Питхон скрипту овог примера.

тест.ткт

ПЕРЛ

питхон

басх

пхп

Направите Питхон датотеку са следећом скриптом која користи један подпроцес за читање садржаја датотеке „тест.ткт“ и други подпроцес за тражење одређене речи у тој текстуалној датотеци. Овде се реч „питхон“ претражује у „тест.ткт датотеци“ која садржи ову реч.

#Увоз модула

увоз подпроцес

#Дефинишите процес за улазни ток

у процесу = подпроцес . Попен ( [ 'мачка' , 'тест.ткт' ] , стдоут = подпроцес . ЦЕВ , текст = Тру > #Дефинишите процес за излазни ток

оут_процесс = подпроцес . Попен (

[ 'дршка' , 'питхон' ] , стдин = у процесу. стдоут ,

стдоут = подпроцес . ЦЕВ , текст = Истина )

#Складишти излаз улазних и излазних процеса

излаз , _ = оут_процесс. комуницирати ( )

#Одштампајте излаз

принт ( 'Излаз:' , излаз )

Излаз:

Следећи излаз се појављује након извршавања скрипте:

Иди на врх

Контролишите подпроцес помоћу тајмера

Направите Питхон датотеку са следећом скриптом која користи тајмер за извршавање команде помоћу подпроцеса. Овде се блок „покушај осим“ користи за покретање тајмера, а блок „коначно“ се користи за отказивање тајмера.

#Увезите модул подпроцеса

увоз подпроцес

#Увезите модул тајмера

из навојем увоз Тајмер

#Дефиниши команду

цмд = [ 'пинг' , '068503358ДДДД23ЦФ6ЦФ00Ф5Д6АД9А45ЦД0А8Е03' ]

#Отворите процес

стр = подпроцес . Попен (

цмд , стдоут = подпроцес . ЦЕВ , стдерр = подпроцес . ЦЕВ )

#Дефинишите тајмер

тајмер = Тајмер ( 2 , ламбда процес: процес. убити ( ) , [ стр ] )

покушати :

#Покрени тајмер

тајмер. почетак ( )

#Реад оутпут

стдоут , _ = стр. комуницирати ( )

#Принт оутпут

принт ( стдоут. декодирати ( ) )

осим :

#Одштампај поруку о грешци за погрешно

принт ( „Грешка:“ , сис . екц_инфо ( ) )

коначно :

#Зауставите тајмер

тајмер. поништити, отказати ( )

Излаз:

Следећи излаз се појављује након извршавања скрипте:

Иди на врх

Прочитајте унос за стримовање

Креирајте Питхон датотеку која чита садржај излаза потпроцеса помоћу петље „вхиле“ и сачувајте садржај у променљивој. Садржај ове променљиве се штампа касније. Овде се команда 'цурл' користи у подпроцесу за Д8Б99Ф68Б208Б5453Б391ЦБ0Ц6Ц3Д6А9824Ф3Ц3А УРЛ.

#Увоз модул

увоз подпроцес

#Дефини команду

цмд = [ 'коврџа' , '068503358ДДДД23ЦФ6ЦФ00Ф5Д6АД9А45ЦД0А8Е03' ]

стр = подпроцес . Попен ( цмд , стдоут = подпроцес . ЦЕВ ,

стдерр = подпроцес . ЦЕВ , текст = Истина >

#Иницијализујте излазну променљиву

излаз = ''

док Истина :

#Прочитајте излаз процеса ред по ред

лн = стр. стдоут . реадлине ( )

#Заврши из петље када се подпроцес заврши

ако не у:

пауза

излаз = излаз + лн

#Одштампајте линију

принт ( излаз )

#Набавите повратни код након завршетка процеса

ретурн_цоде = стр. чекати ( )

#Одштампајте повратни код

принт ( 'Повратни код: ' , ретурн_цоде )

Излаз:

Последњи део од три излаза приказан је на следећој слици. Повратни код након завршетка потпроцеса је 0:

Иди на врх

Закључак

Различите употребе Питхон потпроцеса.Попен() су приказане у овом водичу коришћењем више Питхон скрипти које ће помоћи Питхон корисницима да упознају основну употребу ове функције.