Pitão

Como usar o pexpect em Python

Como usar o pexpect em Python

esperar é um módulo Python popular para fazer diferentes tipos de tarefas automatizadas. Diferentes tipos de aplicativos interativos, como telnet, ssh, ftp, etc., pode ser automatizado usando este módulo. É um módulo Python puro e não requer um compilador C ou extensões TCL ou Expect como outros módulos esperam. Ele pode funcionar facilmente usando apenas um interpretador Python.  Este módulo pode ser usado de duas maneiras. Uma maneira é usar o corre() função, e outra maneira é usar desova aula. O corre() função é mais fácil de usar do que a classe spawn e executa as tarefas automatizadas rapidamente. O comando específico ou um programa pode ser executado pelo corre() função que retorna a saída. Esta função pode ser usada como alternativa ao os.sistema() função. O desova classe é mais poderosa do que o corre() função que pode gerar um programa filho, interagir com ele enviando dados e aguardando a resposta. Este módulo é instalado em python3 por padrão. As duas maneiras de usar este módulo foram mostradas neste tutorial.

Usando a função run ()

Sintaxe:

A sintaxe do corre() função é dada abaixo.  Tem muitos argumentos para vários propósitos. Mas os primeiros 3 ou 4 argumentos são usados ​​principalmente. O primeiro argumento desta função é obrigatório que leva o comando que esta função irá executar. Ele pode retornar várias saídas. Se o withexitstatus argumento é usado com o Falso valor, ele só retornará a saída do comando.

run (command, timeout = 30, withexitstatus = False, events = None, extra_args = None, logfile = None, cwd = None, env = None, ** kwargs)

Exemplo-1: Diferentes usos da função run ()

Três usos diferentes do corre() função mostrada no seguinte script. O 'pwda saída do comando é executada no primeiro corre() função que irá mostrar o caminho do diretório de trabalho atual. A seguir, o corre() função é usada para determinar os detalhes de um arquivo específico, e o nome do arquivo será obtido do usuário. O terceiro corre() função é usada para fazer o ssh conexão e recupere todos os arquivos e pastas do rede pasta.

# Módulo de expectativa de importação
expectativa de importação
importar os
# Execute um comando simples
print ("O diretório de trabalho atual: \ n% s"% pexpect.executar ('pwd').decodificar ("utf-8"))
# Recupere as informações de um arquivo específico
filename = input ("Insira um nome de arquivo existente:")
# Verifique se o arquivo existe ou não
se os.caminho.existe (nome do arquivo):
output = pexpect.run ("ls -l" + nome do arquivo, withexitstatus = 0)
print ("Informação de um arquivo particular: \ n% s"% output.decodificar ("utf-8"))
senão:
print ("O arquivo não existe.")
# Recupere os arquivos e a pasta de um diretório específico usando o comando ssh
output = pexpect.run ("ssh [email protected] 'ls web /'", events = '(?i) senha ':' 12345 \ n ')
print ("\ nO resultado do comando ssh: \ n% s"% output.decodificar ("utf-8"))

Resultado

A seguinte saída aparecerá após a execução do script acima. Na saída, doc1.py forneceu como nome de arquivo, e os detalhes deste arquivo mostraram. A seguir, a lista de todos os arquivos do rede pasta foi mostrada usando ssh conexão.

Usando classe de spawn

A sintaxe da classe de spawn é fornecida abaixo. O construtor desta classe pode receber muitos argumentos para muitos propósitos. O primeiro argumento é obrigatório que irá receber o comando para execução.

classe spawn __init __ (self, command, args = [], timeout = 30, maxread = 2000, search window size = none, logfile = none, cwd = none, env = none)

Exemplo-2: uso simples da classe de spawn

O uso simples da classe spawn é mostrado no seguinte script. O 'data'comando foi executado aqui usando a classe spawn. A saída do comando será recuperada criando o objeto da classe spawn, e a saída é impressa em formato legível por humanos usando o decodificar() método.

# Módulo de expectativa de importação
expectativa de importação
# Execute o comando date usando spawn
criança = expectativa.spawn ('data')
# Leia a saída filha sem gerar EOF
filho.esperar (esperar.EOF)
# Armazena o texto que é esperado pelo padrão de string
output = child.antes
# Imprima o resultado
print ("Hoje é:", saída.decodificar ("utf-8"))

Resultado

A seguinte saída aparecerá após a execução do script acima.

Exemplo-3: Leia o conteúdo do diretório usando a conexão ssh

A criação da conexão ssh e a leitura da lista de todos os arquivos e pastas de um determinado diretório são mostradas no seguinte script.  Aqui, a senha do usuário definido será obtida do usuário para fazer a conexão ssh usando a classe spawn. Se a senha fornecida estiver incorreta, o script será encerrado exibindo uma mensagem de erro.  Se a senha fornecida estiver correta, mas o terminal não estiver definido, o script mostrará a mensagem de sucesso para a conexão, enviará o tipo de terminal e definirá o padrão esperado do prompt de comando. Se a senha estiver correta e o terminal estiver definido, o script mostrará a mensagem de sucesso e o prompt de comando do shell.

# Módulo de expectativa de importação
expectativa de importação
# Defina o nome de usuário para conexão ssh
username = '[email protected]'
# Obtenha uma senha válida do usuário
Senha = entrada ("Digite a senha de login de% s:"% nome de usuário)
# Execute o comando ssh usando spawn
criança = expectativa.spawn ('ssh' + nome de usuário)
# Espere pela senha
filho.esperar ('senha:')
# Envia a senha retirada do usuário
filho.sendline (senha)
# Três saídas esperadas
i = criança.expect (['Permissão negada', 'Tipo de terminal', '[# \ $]'])
# eu serei 0 se o ssh não conseguir se conectar
se i == 0:
print ("Permissão negada pelo anfitrião. Incapaz de entrar")
filho.matar (0)
# i será 1 se o ssh puder se conectar, mas o terminal não estiver definido
elif i == 1:
print ('Conectado com sucesso.\ nTipo de terminal não está definido.')
filho.sendline ('vt100')
filho.esperar ('[# \ $]')
# eu serei 2 se o ssh for capaz de se conectar e o terminal estiver configurado
elif i == 2:
print ('Conectado com sucesso.')
prompt = criança.após
print ('Prompt de Comando Shell:', prompt.decodificar ("utf-8"))

Resultado

A seguinte saída aparecerá quando o script acima for executado com a senha errada.

A seguinte saída aparecerá quando o script acima for executado com a senha correta.

Conclusão

pexpect é um módulo muito útil para usuários de Python que os ajuda a realizar suas tarefas regulares automaticamente. Os usos básicos do módulo pexpect do Python foram descritos neste tutorial usando exemplos fáceis para ajudar os usuários a começar a trabalhar com este módulo.

Ferramentas úteis para jogadores de Linux
Se você gosta de jogar no Linux, é provável que tenha usado aplicativos e utilitários como Wine, Lutris e OBS Studio para melhorar a experiência de jo...
Jogos HD Remasterizados para Linux que nunca tiveram uma versão Linux anterior
Muitos desenvolvedores e editores de jogos estão apresentando remasterização em HD de jogos antigos para estender a vida da franquia, por favor, os fã...
Como usar o AutoKey para automatizar jogos Linux
AutoKey é um utilitário de automação de desktop para Linux e X11, programado em Python 3, GTK e Qt. Usando sua funcionalidade de script e MACRO, você ...