Tópico de Conteúdo:
- Execute um comando simples do Linux
- Execute um comando com dados de entrada
- Execute um script Python
- Lidar com o erro de subprocesso
- Retorne o código do Subprocess.Popen
- Redirecionar a saída do subprocesso para arquivo
- Multiprocessamento usando Subprocess.Popen
- Lidar com o fluxo de entrada e saída é
- Controle o tempo limite e o atraso
- 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óduloimportar 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:
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óduloimportar 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”:
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árioimportar 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:
`
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ódulosimportar 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:
A seguinte saída aparece se o comando “usr” for considerado uma entrada que é um comando válido:
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ódulosimportar 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:
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óduloimportar 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:
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áriosimportar 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:
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ódulosimportar 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:
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 subprocessoimportar 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:
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óduloimportar 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:
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.