Exemplos de Subprocess.Popen em Python

Exemplos De Subprocess Popen Em Python



O subprocesso Python é um dos módulos úteis usados ​​para executar diferentes comandos e processos shell e executar outro script ou arquivos executáveis ​​usando o script Python. Pode ser usado também para redirecionar os dados de um processo para outro e tratar os erros gerados pelos processos filhos. O módulo de subprocesso possui muitas classes que são usadas para diversos fins. A classe “subprocess.Popen” é uma das classes deste módulo que serve para interagir com os processos externos e realizar diversos tipos de tarefas entre os processos. Vários usos da classe “subprocess.Popen” no script Python são mostrados neste tutorial.

Tópico de Conteúdo:

  1. Execute um comando simples do Linux
  2. Execute um comando com dados de entrada
  3. Execute um script Python
  4. Lidar com o erro de subprocesso
  5. Retorne o código do Subprocess.Popen
  6. Redirecionar a saída do subprocesso para arquivo
  7. Multiprocessamento usando Subprocess.Popen
  8. Lidar com o fluxo de entrada e saída é
  9. Controle o tempo limite e o atraso
  10. Ler uma entrada de streaming

Execute um comando simples do Linux

O comando “data” é usado para exibir a data e hora atuais do sistema. Crie um arquivo Python com o seguinte script que cria um subprocesso que executa o comando “data” e imprime a saída deste comando:

#Importar o módulo

importar subprocesso

#Defina um comando para o subprocesso e

#abrir processo usando a função Popen()

saída = subprocesso . Popen ( [ 'data' ] , saída padrão = subprocesso . CANO )

#Recupere a saída e o erro comunicando-se com o processo

saída padrão , stderr = saída. comunicar ( )

#Imprima a saída

imprimir ( saída padrão. decodificar ( ) )

Saída:







A seguinte saída aparece após a execução do script anterior:



  p1



Ir para o topo





Execute um comando com dados de entrada

O comando “wc” com a opção “-c” é usado para contar o número total de caracteres do valor da string que é fornecido com este comando. Crie um arquivo Python com o seguinte script que cria um subprocesso com a função Popen() para executar os comandos “wc –c”. O valor da string é obtido do terminal após a execução do script e o total de caracteres da string de entrada é impresso na saída.

#Importar o módulo

importar subprocesso

#Defina um comando para o subprocesso e

#Abra o processo usando a função Popen()

saída = subprocesso . Popen ( [ 'Banheiro' , '-c' ] , saída padrão = subprocesso . CANO )

#Recupere a saída e o erro comunicando-se com o processo

saída padrão , stderr = saída. comunicar ( )

#Imprima a saída

imprimir ( saída padrão. decodificar ( ) )

Saída:



A seguinte saída aparece para o valor de entrada “Exemplos de subprocesso Python”:

Ir para o topo

Execute um script Python

Crie um arquivo Python chamado “sum.py” com o seguinte script que calcula a soma de dois números e esses números são fornecidos como argumentos de linha de comando:

soma.py

#Importar módulo necessário

importar sistema

#Contar o total de argumentos

n = apenas ( sistema . argumento )

#Adicione os dois primeiros valores dos argumentos

soma = interno ( sistema . argumento [ 1 ] ) + interno ( sistema . argumento [ 2 ] )

#Imprima o resultado da adição

imprimir ( 'A soma de ' + sistema . argumento [ 1 ] + ' e ' + sistema . argumento [ 2 ] + ' é' , soma )

Crie um Python arquivo com o seguinte script que executará um Python arquivo nomeado soma . py com dois argumentos criando um subprocesso .

#Importar o módulo

importar subprocesso

#Execute o script python no subprocesso e

#abra o processo usando a função Popen()

saída = subprocesso . Popen ( [ 'python3' , 'soma.py' , '25' , '55' ] , saída padrão = subprocesso . CANO ) #Recupere a saída e o erro comunicando-se com o processo

saída padrão , stderr = saída. comunicar ( )

#Imprima a saída

imprimir ( saída padrão. decodificar ( ) )

Saída:

A seguinte saída aparece após a execução do script anterior:

Ir para o topo

`

Lidar com o erro de subprocesso

Crie um arquivo Python com o seguinte script que trata os erros do subprocesso usando o bloco “try-except”. Um comando é obtido do usuário e executado pelo subprocesso. A mensagem de erro é exibida se algum comando inválido for obtido do usuário.

#Importar os módulos

importar subprocesso

importar sistema

#Assuma o comando do usuário

comando = entrada ( 'Digite um comando válido:' )

tentar :

#Abra o processo usando a função Popen()

saída = subprocesso . Popen ( [ comando ] , saída padrão = subprocesso . CANO )

#Recupere a saída e o erro comunicando-se com o processo

saída padrão , stderr = saída. comunicar ( )

#Imprima a saída

imprimir ( saída padrão. decodificar ( ) )

exceto :

imprimir ( 'Erro:' , sistema . exc_info ( ) )

Saída:

A seguinte saída aparece se o comando “pwd” for considerado uma entrada que é um comando válido:

  p4-1

A seguinte saída aparece se o comando “usr” for considerado uma entrada que é um comando válido:

  p4-2

Ir para o topo

Retorne o código do Subprocess.Popen

Crie um arquivo Python com o seguinte script que executa um comando “ls” por meio do subprocesso para obter a lista de todos os arquivos Python do local atual. O script aguarda a conclusão do subprocesso e imprime o código de retorno.

#Importar os módulos

importar subprocesso

importar sistema

#Defina o comando

comando = [ 'é' , '-eu' , '*.py' ]

tentar :

#Abra o processo usando a função Popen()

saída = subprocesso . Popen ( comando , saída padrão = subprocesso . CANO ,

stderr = subprocesso . CANO , texto = Verdadeiro )

#Aguarde para concluir o processo

código retificado = saída. espere ( )

#Imprima o código de retorno

imprimir ( 'Código de retorno:' , código retificado )

exceto :

#Imprime mensagem de erro para o erro

imprimir ( 'Erro:' , sistema . exc_info ( ) )

Saída:

Uma saída semelhante aparece após a execução do script anterior:

Ir para o topo

Redirecionar a saída do subprocesso para arquivo

Crie um arquivo Python com o script a seguir que grava a saída do subprocesso em um arquivo de texto. O comando executado pelo subprocesso é obtido do usuário.

#Importar módulo

importar subprocesso

#Defina o nome do arquivo

nome do arquivo = 'outfile.txt'

#Faça um comando ping

cmd = entrada ( 'Digite um comando ping:' )

#Divida a entrada obtida com base no espaço

argumentos = cmd . dividir ( )

#Escreva a saída do comando no arquivo

com abrir ( nome do arquivo , 'Em' ) como dados desatualizados:

processo = subprocesso . Popen ( argumentos , saída padrão = dados desatualizados )

#Aguarde a conclusão do processo

Código de retorno = processo. espere ( )

Saída:

De acordo com a saída a seguir, o “ping -c 3 www.google.com ”O comando é obtido do usuário e o comando “cat” é usado para exibir o conteúdo do arquivo que é escrito pelo subprocesso:

Ir para o topo

Multiprocessamento usando Subprocess.Popen

Crie um arquivo Python com o seguinte script onde o uso do multiprocessamento é mostrado usando subprocesso. Aqui, uma função chamada display_msg() é chamada várias vezes usando multiprocessamento.

#Importar módulos necessários

importar multiprocessamento

importar subprocesso

#Define a função que será chamada pelo multiprocessamento

definição display_msg ( n ) :

#Defina o comando com a função format()

cmd = 'eco 'Programação Python'' . formatar ( n )

#Abra o processo usando a função Popen()

processo = subprocesso . Popen ( cmd , concha = Verdadeiro , saída padrão = subprocesso . CANO )

#Recupere a saída e o erro comunicando-se com o processo

saída padrão , erro = processo. comunicar ( )

#Imprima a saída

imprimir ( saída padrão. decodificar ( ) )

#Chame a função 5 vezes criando o multiprocessing.Pool

com multiprocessamento. Piscina ( multiprocessamento. contagem_de_cpu ( ) ) como mp:

#Mapeie a função

mp. mapa ( display_msg , faixa ( 1 , 5 ) )

Saída:

A seguinte saída aparece após a execução do script anterior:

Ir para o topo

Lidar com os fluxos de entrada e saída

Crie um arquivo de texto chamado “test.txt” com o seguinte conteúdo antes de criar o script Python deste exemplo.

teste.txt

PERL

Pitão

festa

php

Crie um arquivo Python com o script a seguir que usa um subprocesso para ler o conteúdo do arquivo “test.txt” e outro subprocesso para pesquisar uma palavra específica nesse arquivo de texto. Aqui, a palavra “python” é pesquisada no “arquivo test.txt” que contém esta palavra.

#Importar módulos

importar subprocesso

#Defina um processo para o fluxo de entrada

em processo = subprocesso . Popen ( [ 'gato' , 'teste.txt' ] , saída padrão = subprocesso . CANO , texto = Tru > #Defina um processo para o fluxo de saída

processo_out = subprocesso . Popen (

[ 'pegada' , 'Pitão' ] , stdin = em processo. saída padrão ,

saída padrão = subprocesso . CANO , texto = Verdadeiro )

#Armazena a saída dos processos de entrada e saída

saída , _ = processo_out. comunicar ( )

#Imprima a saída

imprimir ( 'Saída:' , saída )

Saída:

A seguinte saída aparece após a execução do script:

Ir para o topo

Controle o subprocesso usando um cronômetro

Crie um arquivo Python com o seguinte script que usa um timer para executar um comando usando um subprocesso. Aqui, o bloco “try-except” é usado para iniciar o cronômetro e o bloco “finally” é usado para cancelar o cronômetro.

#Importar o módulo de subprocesso

importar subprocesso

#Importar o módulo Timer

de rosqueamento importar Cronômetro

#Defina o comando

cmd = [ 'ping' , 'www.example.com' ]

#Abra o processo

p = subprocesso . Popen (

cmd , saída padrão = subprocesso . CANO , stderr = subprocesso . CANO )

#Defina o cronômetro

cronômetro = Cronômetro ( 2 , lambda processo: processo. matar ( ) , [ p ] )

tentar :

#Inicie o cronômetro

cronômetro. começar ( )

#Leia a saída

saída padrão , _ = pág. comunicar ( )

#Imprimir saída

imprimir ( saída padrão. decodificar ( ) )

exceto :

#Imprime mensagem de erro para o errado

imprimir ( 'Erro:' , sistema . exc_info ( ) )

finalmente :

#Pare o cronômetro

cronômetro. cancelar ( )

Saída:

A seguinte saída aparece após a execução do script:

Ir para o topo

Leia a entrada de streaming

Crie um arquivo Python que leia o conteúdo da saída do subprocesso usando um loop “while” e armazene o conteúdo em uma variável. O conteúdo desta variável é impresso posteriormente. Aqui, o comando “curl” é usado no subprocesso para o www.google.com URL.

#Importar módulo

importar subprocesso

#Definir comando

cmd = [ 'ondulação' , 'www.example.com' ]

p = subprocesso . Popen ( cmd , saída padrão = subprocesso . CANO ,

stderr = subprocesso . CANO , texto = Verdadeiro >

#Inicialize a variável de saída

saída = ''

enquanto Verdadeiro :

#Leia a saída do processo linha por linha

Em = pág. saída padrão . Leia a linha ( )

#Terminate do loop quando o subprocesso terminar

se não Em:

quebrar

saída = saída + ln

#Imprima a linha

imprimir ( saída )

#Obtenha o código de retorno após finalizar o processo

Código de retorno = pág. espere ( )

#Imprima o código de retorno

imprimir ( 'Código de retorno: ' , Código de retorno )

Saída:

A última parte das três saídas é mostrada na imagem a seguir. O código de retorno após a conclusão do subprocesso é 0:

Ir para o topo

Conclusão

Diferentes usos do subprocess.Popen() do Python são mostrados neste tutorial usando vários scripts Python que ajudarão os usuários do Python a conhecer os usos básicos desta função.