Python, uma introdução além do Hello Word

em Artigos, Desenvolvimento, Python.

Primeiro: No seu terminal/console/bash assumindo que já tenha python instalado, digite: python -c ‘print(“Hello Word”)’
Segundo: O primeiro item será o único exemplo do famoso Hello Word, neste post.

A intenção deste artigo, é mostrar de forma pratica como eu, assim como muitos com os quais me relacionei nestes “curtos 5 anos” em minha carreira de T.I, aprenderam não só Python mas como diversas outras linguagens e tecnologias na prática, aplicando-as efetivamente nas soluções mais diversas dos problemas mais diversos, no dia a dia de um administrador de sistemas.

Antes de qualquer exemplo, que tal um resumo sobre a história do Python? Leia aqui! Sim, eu não vou escrever sobre, assim como o artigo que indico neste ponto, muitos outros talvez sejam mostrados para que o post não se prolongue muito, e, outras fontes de conhecimento sejam compartilhadas. 😀

Agora, imagine que tenhamos alguns servidores Linux aos quais tenhamos acesso SSH para, periodicamente realizarmos algumas tarefas administrativas como atualizações de pacotes, cópia de arquivos, etc, dificilmente iremos escrever nossas próprias soluções, pois ferramentas como Ansible, Puppet, CFEngie dentre outras, ja estão ao nosso alcance e cumprem muito bem suas tarefas. Entretanto, se estivermos administrando appliances como firewalls em uma rede, ou até mesmo interfaces de acesso remoto como as disponibilizadas em servidores Dell e HP, sim, podemos automatizar tarefas, como a obtenção de diagnósticos através de suas interfaces SSH.

1. Executando comandos remotos via SSH com Paramiko:

# -*- coding: utf-8 -*-
import paramiko

def Client(host, username, password):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    if all([host, username, password]):
        try:
            ssh.connect(host, username=username, password=password)
            return(ssh)
        except paramiko.ssh_exception.AuthenticationException:
            return(False)
    return(False)


if __name__ == '__main__':
    infos = {
        'host': 'xxx.xx.x.xx',
        'user': 'lalala',
        'password': 'lalala'
    }
    commands = ['ls -la', 'uname -a', 'df -hP']

    connection = Client(
        infos.get("host", False),
        infos.get("user", False),
        infos.get("password", False)
    )

    if connection:
        for command in commands:
            stdin, stdout, stderr = connection.exec_command(command)
            print stdout.readlines()
    else:
        print u"Ops! Algo de errado, não está certo."

A intenção deste exemplo é simplesmente mostrar algumas estruturas básicas de dados em python e como usá-las, além de mostrar também algumas coisas que gosto de aplicar em meus códigos a fim de organizá-los e proporcionar manutenções menos dolorosas. Abaixo uma lista para ilustar os próximos tópicos.

  1. Virtualenv (Não está explícita no exemplo acima, mas gostaria de falar)
  2. Funções
  3. Bibliotecas de terceiro

1. Virtualenv
Permite-nos criar ambientes de desenvolvimento isolados dentro de nosso sistema operacional, basicamente cria no path apontado para o comando “virtualenv ~/venvs/lerolero”, a estrutura de uma instalação python bem como alguns scripts para gerenciar o ambiente virtual.

O uso de virtualenvs, pode se fazer necessario por diversos motivos, como por exemplo, quando o desenvolvedor esta trabalhando em diversos projetos ao mesmo tempo, onde o projeto X necessita de uma biblioteca em uma versão especifica, e o projeto Y necessita desta mesma biblioteca em uma outra versão, para se evitar conflitos e, até mesmo deixar o sistema operacional com um instalação de python “limpa”, recomenda-se o uso dos ambientes virtuais. Além disso, quando se esta em um ambiente virtual, você não precisa de um usuário ‘elevado’ para instalar seus pacotes, ou seja, em muitos casos onde o desenvolvedor não é ‘root’ na maquina, mas tem o virtualenv a sua disposição a dependência de um sysadmin, para tal tarefa se ausenta.

Recomendo este artigo, para quem quiser maiores detalhes, ou a própria documentação.

2. Funções
Em python, uma função é um bloco de código “nomeado” que ao ser “chamado” executa este bloco, e pode ou não retornar o resultado do código executado. Utilizo funções em meus programas constantemente, não só para a reutilização de código mas também para deixa-lo organizado. Funções em python são definidas com o uso da palavra reservada “def” e podem ter parâmetros definidos. Falando em parâmetros, estes podem podem ser declarados com valores default, veja:

Função soma com valores default:

def soma(x=1, y=2):
    return(x + y)

No exemplo acima, pode se ver a definição de uma função com 2 parâmetros  (x e y), e os valores inicias/default (1 e 2) respectivamente. Ao executarmos essa função, se, não passarmos novos valores para x e y, os valores pré definidos serão assumidos e utilizados na execução do código, ou seja, podemos simplesmente chamar a função soma(), sem passar nenhum parâmetro. Agora, se tiver a  função definida da seguinte forma:

def soma(x, y)
    return(x + y)

Se chamarmos a função sem informar dois parâmetros, uma exceção/erro do tipo TypeError será levantada e o programa terá sua execução interrompida, informando que a função soma espera dois argumentos e nenhum foi passado.

Podemos ainda escrever funções que recebam *args e **kwargs como argumentos, desta forma se passarmos um lista de argumentos (*args), python ira “descompactar” esta lista para você, e deixar os itens desta lista a sua disposição dentro da função, bem como se passarmos um dicionário para a função (**kwargs), o mesmo será feito. Listas e dicionários que aqui menciono, foram utilizadas no exemplo acima, para definirmos as credenciais de acesso para o servidor ssh (dicionário) e quando definimos a lista de comandos que executaríamos no servidor remoto (lista).

Mais sobre funções pode ser encontrada internet a fora, existe muito material sobre e como este é um post introdutório além de não dedicado somente a funções, deixo aqui um exemplo de material encontrado na internet, para que você possa se aprofundar.

3. Bibliotecas de terceiros:
Por fim, para encerrarmos os pontos do primeiro exemplo, gostaria de mencionar algo que ja me fez perder muito tempo, ou até mesmo escrever códigos “redundantes” sem necessidade. Recentemente durante a leitura deste livro, onde é citado em poucas palavras o quanto não compensa “re-inventar a roda”, uma vez que na maioria dos casos outros programadores ja enfrentaram aquele problema e desenvolveram soluções maduras, as mesmas soluções são compartilhadas e mantidas pela comunidade, como é o caso da biblioteca paramiko utilizada neste exemplo para utilizarmos recursos do protocolo SSH, pude reforçar um pensamento que sempre me foi passado, pesquise, pergunte. Existem diversos fóruns, blogs, grupos, lista de email para consumir conteúdo, sendo assim, abaixo listarei algumas fontes.

– Grupo do Google:
https://groups.google.com/forum/#!forum/python-brasil
– Comunidade no Facebook
https://www.facebook.com/groups/python.brasil/?fref=ts
– Stackoverflow
http://stackoverflow.com/questions/tagged/python
– Blogs
Nacional: http://pythonclub.com.br/
https://pythonhelp.wordpress.com/
Internacional:
https://realpython.com/blog/

Para os mais “curiosos/atentos”, deixo abaixo alguns pontos que não detalhei, mas que foram inseridos no código propositalmente.

A primeira linha do script “# -*- coding: utf-8 -*-“, explicação.
As variáveis infos e commands
A instrução if __name__ == “__main__”, explicação.
try/except utilizado na função Client

Bom, assim como o post é dedicado ao publico iniciante, gostaria de deixar claro que também me considero um iniciante, (tanto como escritor neste primeiro artigo, quanto como programador) e a motivação para escrever este, além da vontade de fazer por alguém o que ja fizeram por mim, (compartilhando algo que sabe), foi também um comentário em uma comunidade, onde um palestrante dizia que não era expert no assunto do qual iria palestrar, porém, ele sabia que o básico que ele dominava do assunto poderia ajudar alguém. :)

Até a próxima!

Você também pode gostar