Programação Avançada Scripts para Linux
Prof. Natalia Castro Fernandes
Mestrado em Telecomunicações – UFF
2º semestre/2012
Introdução
Scripts permitem
Executar sequências de comandos
Desenvolver testes
Monitorar dados
Etc;
Podem ser feitos em diversas linguagens
Shell, bash, awk, python
Python fornece uma linguagem simples para o desenvolvimento de scripts
Introdução
Módulos com métodos interessantes para scripts
Módulo sys
Módulo provê acesso a variáveis/funções usadas ou mantidas pelo interpretador
Módulo os
Módulo provê interfaces para funcionalidades do sistema operacional
Módulo sys
sys.argv
Variável do tipo lista contendo a lista de
argumentos passados pela linha de comando para o script Python
argv[0] nome do script
Demais itens são entradas do script
Entradas para o script
Módulo sys
sys.path
Mostra o valor da variável de ambiente pythonpath
A pythonpath é utilizada para buscar os módulos que estão sendo incluídos no código
Exemplo de sys.path
Módulo estacionamento2 foi desenvolvido em sala
Salvo em C:\\natalia
Python começa a buscar módulos
aqui também
Modificações só valem na execução do
seu script
Módulo sys
sys.platform
Retorna o nome da plataforma em uso
Módulo sys
sys.stdin, sys.stdout e sys.stderr
Objetos do tipo file que correspondem a
entrada, saída e erro padrões do interpretador
sys.__stdin__, sys.__stdout__ e sys.__stderr__
Objetos contendo o valor original de stdin, stderr e stdout
Módulo os
os.name
Nome para identificação do sistema operacional
Melhor usar o sys.platform
os.environ
Mostra um dicionário com o conteúdo de todas as variáveis de ambiente
Módulo os
Módulo os
os.listdir(path)
Retorna uma lista contendo todas as entradas de um diretório especificado por path
Não inclui . e ..
Módulo os
os.chdir(path)
Muda o diretório corrente para path
os.getcwd()
Retorna a string representando o diretório corrente
Módulo os
os.chown(path, uid, gid)
Muda o dono de path, através da identificação do usuário uid e do respectivo grupo gid
Disponível apenas no Unix
Módulo os
os.chmod(path, mode)
Muda o modo de proteção (leitura, escrita e execução) do path. O mode deve ser colocado no modo numérico.
Disponível apenas no Unix
Módulo os
Módulo os
os.link(source, link_name)
Cria um hard link apontando para source com o nome link_name
Disponível apenas no Unix
Módulo os
Módulo os
os.mkdir(path[, mode])
Cria um diretório com nome path e permissão mode (permissão opcional – padrão 0777)
Modo representado em octal
Número iniciado por zero
Gera uma exceção do tipo OSError se o diretório já existe
Módulo os
Módulo os
os.remove(path)
Remove o arquivo path
Se path for um diretório, gera exceção OSError
No Windows, se o arquivo estiver em uso, também gera uma exceção
Módulo os
os.rename(src, dst)
Renomeia o arquivo ou diretório src para o nome dst
os.rmdir(path)
Remove o diretório path
Só funciona se o diretório estiver vazio
Módulo os
os.fork()
Cria um processo filho
Exemplos: test_fork3.py a test_fork6.py
Módulo os
os.execv(path, args)
Executa o programa especificado em path
Substitui o processo atual
Args é uma lista ou uma tupla
O primeiro argumento deve ser sempre o nome do programa executado
Exemplos: test_fork7.py
Módulo os
Módulo os
os.kill(pid, sig)
Envia o sinal sig para o processo pid
os.nice(increment)
Incrementa increment na prioridade de um processo
Retorna o novo valor da nova prioridade
Disponível apenas no Unix
Módulo os
os.popen(comando)
Executa o comando, que deve ser representado como uma string
os.system(comando)
Executa o comando em um subshell
Módulo os
No Windows:
Módulo os
No Linux
Popen não retorna nada, apenas executa o
comando
Módulo os
No Linux
Execução do comando com o system acontece
em subshell, mas aparece no interpretador
Módulo os
No Linux
Mas, atenção! O system retorna zero e não o texto que aparece natela
Módulo os
os.wait()
Espera que processo filho seja finalizado
Retorna o pid do processo filho e a indicação de status de saída
Disponível apenas em Unix
os.waitpid(pid, options)
No Unix:
Espera que o processo filho com pid seja terminado
Retorna o pid do processo filho e a indicação de status de saída
No Windows:
Espera que o processo filho com pid seja terminado
Retorna uma tupla contendo pid, o status de saída do processo shiftado de 8 bits
Módulo os
os.curdir
Constante (string) contendo a indicação para diretório atual
No Windows e no POSIX, vale ‘.’
os.pardir
Constante (string) contendo a indicação de diretório pai
No Windows e no POSIX vale ‘..’
os.sep
Caractere usado pelo sistema operacional para separar componentes em um nome de diretório
Vale '/' no POXIS e '\\‘ para o Windows
Para parsear o nome do diretório use :
os.path.split()
Para juntar nomes formando um diretório, use:
os.path.join()
SSH
Ao fazer scripts, muitas vezes será
importante se logar em diferentes máquinas
Uso do ssh
Conexão segura entre duas máquinas
Exige autenticação
Nome e senha
Certificados
Evita ter que colocar nome e senha a cada vez que se faz a comunicação
Gerar certificado no cliente e armazenar no servidor
Cliente é o nó que inicia a conexão
SSH
Exemplo de uso:
ssh user@hostname comand
ssh [email protected] ‘ls –lisa’
Com o python:
os.system(‘ssh [email protected] \’ls -lisa
> temp\’ ’)
SSH
Exemplo
...
SSH
Para fazer uma conexão ssh via python
http://www.no-ack.org/2010/11/python- bindings-for-libssh2.html
Exercícios
Faça um script que crie um diretório com 10 arquivos com nomes aleatórios
Faça um script que mude o nome de todos os arquivos de um diretório, colocando um texto escolhido pelo usuário na frente do nome do arquivo.
Ex:
Antes: fsdasdasd
Depois: texto-fsdasdasd
Exercícios
Faça um script que monitore os dados de sua placa de rede de 5 em 5 segundos e guarde em um arquivo especificado pelo usuário.
O usuário deve especificar também o tempo total de teste.
Faça um script que leia um arquivo de configuração e chame um programa de acordo com as entradas lidas.
Exemplo:
Arquivo de configuração:
Nome=natalia,root
Dispositivo=maquina.lab.uff.br
Comando = ls -lisa
Saída=temp
Comando gerado e executado pelo seu script
ssh [email protected] ‘ls -lisa’ >> temp
ssh [email protected] ‘ls –lisa’ >> temp