Páginas

Showing posts with label dica. Show all posts
Showing posts with label dica. Show all posts

Monday, May 2, 2011

Dica: como terminar uma sessão de SSH congelada

Algumas vezes por algum problema na rede ou qualquer outra coisa ficamos com o nosso terminal bloqueado por conta de uma conexão SSH morta.
O que podemos fazer é matar o processo com um "kill" ou simplesmente fechar a janela do console (exemplo: gnome-terminal).

Mas existe uma forma melhor de terminar esta sessão mal-sucedida. Basta digitar ENTER, seguido de ~..
Pode parecer bizarro à primeira vista, mas funciona. Você vai encerrar o SSH e voltar para o seu bash.

Monday, April 19, 2010

Como encontrar arquivos usando o GNU find e ignorando alguns diretórios

Esta dica foi tirada de um comentário anônimo em http://www.linux.com/archive/feed/49304.
Fica aqui para referência futura...

Algumas vezes queremos usar o GNU find para procurar por arquivos recursivamente. O problema é quando queremos excluir alguns diretórios da busca. O jeito é usar mais de uma condição. Por exemplo:

find / -path '/proc' -prune -o -path '/dev' -prune -o -name foo.txt

Este comando procura por arquivos chamados "foo.txt" na raiz de sistema, ignorando tudo em /proc e /dev. O '-o' é um "ou" e o '-prune' faz com que o find ignore o caminho encontrado.


Original em inglês:
Sometimes you may want to exclude parts of the directory tree. It took me a while to figure out how to do this because it isn't very intuitive.
If you wanted to search for foo.txt but don't want to descend into /proc or /dev you can do this
find / -path '/proc' -prune -o -path '/dev' -prune -o -name foo.txt

The '-o' means 'or', so there in this case there are three conditions, separated by 'or', which will cause find to take action. The first two is when the path is '/proc' or '/dev' the action find will take is to prune them from the search path. The third condition is when the name is foo.txt. In this case find will print, since no other action is specified.

Sunday, August 23, 2009

Windows Vista: filtrando visualização no Windows Explorer

Muitas vezes ficamos apenas reclamando dos Sistemas Operacionais, reclamamos do Windows, ele não presta, a Microsoft é má, isso e aquilo...
Bem, depois de ouvir cuidadosamente a palestra do Robert M. Lefkowitz na PyCon 2007, espero que você mude de idéia e comece a entender onde fica o software livre e o proprietário, pois ambos tem seu espaço. Então agora estou escrevendo a favor do Windows Vista, já que acabo de descobrir uma funcionalidade muito bacana, que parece ficar escondida na interface...

Programar no Windows não costuma ser uma tarefa tão divertida quanto ter um Linux bem arrumado, mas em ambos os casos eu sempre fico querendo esconder os arquivos .pyc e ver só o que interessa, os .py.
O que eu descobri é que com o Windows Explorer eu posso fazer isso e um pouco mais!

Aqui está um diretório com alguns arquivos Python e seus respectivos compilados, no modo de exibição "detalhes":

Colocando o mouse sobre qualquer coluna aparece uma seta no canto direito, como pode ser visto abaixo. Clique nesta seta para exibir um menu contextualizado com a coluna. Por exemplo, na coluna "Modificado em", é possível filtrar os arquivos por data. Tem até opções para filtrar os arquivos mais recentes, por semana, mês ou ano. Veja:

E você pode filtrar por nome, neste caso resolvi mostrar apenas os arquivos cujo nome começa com números (ocultando o __init__.py, que neste caso não é tão interessante):

E posso agrupar por tipo de arquivo, assim posso acessar separadamente, como se fossem dois "diretórios virtuais":

Note que desde a segunda tela eu já estava usando o filtro por "Tipo" para exibir apenas "Python file", resolvendo meu problema com os ".pyc" que só distraem!

Python: o print agora se chama raw_input

Opa! Ah? Que? O que que houve? Como assim?

Certo, nada mudou no Python... na verdade mudou, agora no Python 3.0 o raw_input virou input, que não deve ser confundido com o input presente nas versões pre-3.0.

A dica que deixo aqui é apenas um fato que percebi que tenho utilizado há algum tempo... talvez uma nova "técnica", mas que não dei muita bola até que comecei a falar sobre ela com amigos, e pensei que não faria mal relatar aqui.

Às vezes queremos colocar um print no meio do código, naquele processo de depuração (claro, você está fazendo TDD e dificilmente precisa fazer isso) e o que acontece é que, na maioria dos casos, temos que ficar caçando onde o output foi parar, quando você tem muita informação que surge no terminal.

Então, use o raw_input, que terá o mesmo efeito do print, porém o interpretador vai parar logo após exibir o que solicitou. Basta pressionar qualquer tecla para continuar a execução do script.

Outrar opção é parar com AssertionError, fazendo:

assert False, objeto_ou_valor_a_ser_inspecionado

Exemplo:
def get_tweets(user):
   from gluon.tools import fetch
   from gluon.contrib.simplejson import loads as sj_loads
   
   page = fetch('http://twitter.com/%s?format=json' % user)
   return sj_loads(page)['#timeline']

#print get_tweets('ilovetweeting')
raw_input(get_tweets('ilovetweeting'))

Saturday, May 30, 2009

Como usar code-completion no console Python

É muito conveniente poder autocompletar comandos e propriedades de objetos Python no prompt de comando. Espero que a maioria de vocês já conheça o IPython, que cumpre muito bem não só esse papel, mas também tem outras funcionalidades muito boas. Confira! Vale a pela instalar, esteja você no Linux, Windows ou Mac...
Dentre as "melhorias" que o IPython traz, cito: autocompletar, indentação automática, sintaxe colorida (syntax highlight), macros, guarda todos os inputs e outputs dos comandos, gerenciamento de sessão, histórico avançado, debugger, etc.

De qualquer forma, para os momentos em que o IPython não está disponível, podemos nos virar com o console Python padrão e usufruir de autocompletar!
Use o seguinte código para ativar essa funcionalidade:

# .pythonrc.py
import readline, rlcompleter
readline.parse_and_bind("tab: complete")


Você pode rodar esse código direto no console ou salvar em um arquivo, digamos ~/.pythonrc.py, e usar a variável de sistema PYTHONSTARTUP para que o Python execute o arquivo na inicialização. (Exemplo: colocar "export PYTHONSTARTUP=$HOME/.pythonrc.py" no arquivo ~/.bashrc)

Note que isto não substitui o IPython!

Saturday, April 4, 2009

Desligar o computador automaticamente quando offline (usando Python)

Já faz um tempo que estou tendo problemas com minha conexão ADSL. Frequentemente acontece alguma bizarrice na minha linha telefônica e preciso fazer alguns procedimentos manuais para reconectar.

Como não compensa montar um robô para realizar a reconexão, passou a ser interessante ao menos desligar o PC quando ele estiver offline...

Então, um dia desses antes de dormir escrevi um curto script Python, que só funciona em Linux, para desligar o computador quando não conseguir acessar uma URL.

#!/usr/bin/env python
import os
from time import sleep, strftime
from urllib2 import urlopen, URLError

TEST_URL = "http://www.google.com"

while 1:
try:
urlopen(TEST_URL)
print '%s [OK] %s' % (strftime("%c"), TEST_URL)
except URLError:
# I am liked offline, halt!
os.system("shutdown now -h")
break
sleep(180)


O que faço depois é, antes de ir dormir, rodar sudo ./halt_when_offline.py > hwo.log.

Friday, March 6, 2009

Como abrir o gnome-terminal com múltiplas abas

Para abrir o gnome-terminal com diversas abas, cada uma em um diretório, podemos usar o comando:

gnome-terminal \
--tab --working-directory=/home/user/project1 \
--tab --working-directory=/home/user/another_dir \
--tab --working-directory=/home/user/project1/src/main \
--tab --working-directory=/home/user


Outros dois parâmetros interessantes são " --command='comando a ser executado' " e " --title='titulo da aba' ", porém nenhum dos dois funcionou satisfatoriamente pra mim.