[python-brasil] encerrar programa depois de um tempo que receber um KeyInterrupt

189 views
Skip to first unread message

gustavo Cardoso

unread,
Dec 25, 2007, 9:04:47 PM12/25/07
to python...@yahoogrupos.com.br
olá pessoal,
estou com um problema para encerrar um programa corretamente:
- no meu programa uso o modulo subprocess para chamar um outro programa.
Esse outro programa nao deve ser encerrado pelas metades. Portanto preciso
receber um KeyInterrupt (Ctrl+ C) e apenas encerrar o programa se esse outro
ja estiver encerrado,
exemplo:

while True:
processo = subprocess.Popen('dorminhoco.sh')
processo.wait()

Imagine que dorminhoco.sh demore 1 minuto para terminar sua execução .
Queria saber
como o meu programa principal faz para ao receber um Ctrl+c apenas terminar
o programa
depois de dorminhoco.sh ter terminado sua execução.
vlw pessoal


[As partes desta mensagem que não continham texto foram removidas]

,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia: |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
| E se você é usuário do BOL lembre-se de cadastrar o |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html


Bruno Gola

unread,
Dec 25, 2007, 9:41:26 PM12/25/07
to python...@yahoogrupos.com.br
Opa

On Dec 26, 2007 12:04 AM, gustavo Cardoso <gnas...@gmail.com> wrote:
> exemplo:
>
> while True:
> processo = subprocess.Popen('dorminhoco.sh')
> processo.wait()
>
> Imagine que dorminhoco.sh demore 1 minuto para terminar sua execução .
> Queria saber
> como o meu programa principal faz para ao receber um Ctrl+c apenas terminar
> o programa
> depois de dorminhoco.sh ter terminado sua execução.

Seguinte, você pode usar

try:
# codigo que nao deve ser interrompido
except KeyboardInterrupt:
# faça o que quiser quando o usuario apertar ctrl+c

[]'s,
--
Bruno Fialho Marques Gola <brun...@gmail.com>
http://www.brunogola.com.br
Cel: (11) 9294-5883

Kamei Hyoga

unread,
Dec 26, 2007, 11:17:56 AM12/26/07
to python...@yahoogrupos.com.br
Opa, pessoal!! Tudo beleza?

Acabei de assinar a lista e me chamo Alexandre.

Bem, estou com o seguinte problema:

Estou desenvolvendo um uploader de imagens, via ftp, e não estou
conseguindo upar as imagens.

O programa conecta, cria a pasta, mas quando é pra enviar as imagens, me
apresenta o seguinte erro:

| server.storbinary('STOR' + img, open(img))
| TypeError: cannot concatenate 'str' and 'instance' objects

Estou usando o seguinte método para upar as fotos:

server.storbinary('STOR' + img, open(img))

onde img é: img = Image.open(infile)

Obs.: o upload não é de uma só imagem, mas sim de todas as imagens
encontradas na pasta definida pelo usuário na interface que eu criei no
glade.


Espero que com essas informações vocês possam me ajudar.

Abraço pessoal!


[As partes desta mensagem que não continham texto foram removidas]

,-----------------------------------------------------------.

Jociel Andrade

unread,
Dec 27, 2007, 7:07:36 AM12/27/07
to python...@yahoogrupos.com.br
On 12/26/07, Kamei Hyoga <kamei...@yahoo.com.br> wrote:
> Opa, pessoal!! Tudo beleza?
>
> Acabei de assinar a lista e me chamo Alexandre.
>
> Bem, estou com o seguinte problema:
>
> Estou desenvolvendo um uploader de imagens, via ftp, e não estou
> conseguindo upar as imagens.
>
> O programa conecta, cria a pasta, mas quando é pra enviar as imagens, me
> apresenta o seguinte erro:
>
> | server.storbinary('STOR' + img, open(img))
> | TypeError: cannot concatenate 'str' and 'instance' objects
>
> Estou usando o seguinte método para upar as fotos:
>
> server.storbinary('STOR' + img, open(img))
>
> onde img é: img = Image.open(infile)

O erro ocorre pois vc está querendo concatenar uma string ('STOR') com
um objeto (img). O correto não é utilizar o objeto "img", mas sim o
nome do arquivo que será gravado no servidor. Tente assim:

def upFile(ftp,filename,path):
fnp = os.path.join(path, filename)
f = open(fnp,"rb")
ftp.storbinary("STOR "+filename, f)
f.close()

[]'s
Jociel

Carlos da Silva Santos

unread,
Dec 27, 2007, 5:22:41 AM12/27/07
to python...@yahoogrupos.com.br
Oi Alexandre,

On Dec 26, 2007 2:17 PM, Kamei Hyoga <kamei...@yahoo.com.br> wrote:
>
> Estou usando o seguinte método para upar as fotos:
>
> server.storbinary('STOR' + img, open(img))
>
> onde img é: img = Image.open(infile)

Estou supondo que "Image" se refere à classe PIL.Image. Nesse caso,
img é um objeto do tipo Image, que não pode ser concatenado com um
string, causando a mensagem de erro que descreveu. Creio que o que
você quer fazer na verdade é:

server.storbinary('STOR' + infile, open(infile))

[]s

Carlos

Caio Moritz Ronchi

unread,
Dec 27, 2007, 6:01:39 AM12/27/07
to python...@yahoogrupos.com.br
Olá, Alexandre.

Sou novo em Python, mas a mensagem de erro que você nos apresenta é
bem clara: você está tentando concatenar 'STOR' (uma String) a img (um
Object). Você provavelmente deseja extrair, antes da concatenação, uma
representação String desse objeto img.

On Dec 26, 2007 2:17 PM, Kamei Hyoga <kamei...@yahoo.com.br> wrote:
>
>
>
>
>
>

> Opa, pessoal!! Tudo beleza?
>
> Acabei de assinar a lista e me chamo Alexandre.
>
> Bem, estou com o seguinte problema:
>
> Estou desenvolvendo um uploader de imagens, via ftp, e não estou
> conseguindo upar as imagens.
>
> O programa conecta, cria a pasta, mas quando é pra enviar as imagens, me
> apresenta o seguinte erro:
>
> | server.storbinary('STOR' + img, open(img))
> | TypeError: cannot concatenate 'str' and 'instance' objects
>
> Estou usando o seguinte método para upar as fotos:
>
> server.storbinary('STOR' + img, open(img))
>
> onde img é: img = Image.open(infile)
>
> Obs.: o upload não é de uma só imagem, mas sim de todas as imagens
> encontradas na pasta definida pelo usuário na interface que eu criei no
> glade.
>
> Espero que com essas informações vocês possam me ajudar.
>
> Abraço pessoal!
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>

--
Caio Moritz Ronchi
http://blogs.floriparug.org/ronchi

Kamei Hyoga

unread,
Dec 28, 2007, 5:41:36 AM12/28/07
to python...@yahoogrupos.com.br
Muito obrigado pelas respostas, mas eu sou novo nisso e realmente fiquei
meio perdido com as respostas.

Vou postar a parte do código desde a conexão, passando pela criação das
miniaturas, do arquivo com os links até onde eu estou "travado".


# Conectando ao servidor, mudando para o modo passivo e criando a pasta
remota
server = FTP(servidor)
server.login(login, senha)
server.set_pasv(True)
server.mkd(pasta_ftp)
server.cwd(pasta_ftp)
#Criando o arquivo links.txt
var_links = open("links.txt", "w")
# Pegando todas as imagens .jpg da pasta selecionada
for infile in glob.glob("*.jpg"):
img = Image.open(infile)
# Convertendo para miniaturas
img.thumbnail((200, 200), Image.ANTIALIAS)
# Não salva a imagem se ela já existe
if infile[0:2] != "th_":
# Salvando a imagem com o prefixo th_
img.save("th_" + infile, "JPEG")
# Adicionando o link da imagem no arquivo links.txt
var_links.write("[url=http://www."+ login +"" + host + "/"+
pasta_ftp + "/" + infile+ "][img]http://www."+ login +""+ host + "/"+
pasta_ftp+ "/"+ "th_" + infile+ "[/img][/url]"+ "\n")
# Fechando o arquivo links.txt
var_links.close()
# Upando os arquivos usando o FTP


server.storbinary('STOR' + img, open(img))

# Fechando a conexão com o servidor
server.quit()

Eu não sou um grande conhecedor de python. Resolvi escrever o código
nessa linguagem, pq gostaria de fazer o meu programa compatível tanto
com Linux quanto no windows. Eu tenho uma outra versão em shell script
que funciona e é ela que estou tentando portar para python.

Agradeço toda a ajuda possível.

Abraço.


[As partes desta mensagem que não continham texto foram removidas]

,-----------------------------------------------------------.

Pablo Cavalcanti

unread,
Dec 28, 2007, 6:38:30 PM12/28/07
to python...@yahoogrupos.com.br
Cara, a ideia eh bem simples...
Vamos analisar a sua linha de codigo:

server.storbinary('STOR' + img, open(img))
voce esta tentando fazer a concatenacao de uma string ('STOR') e uma
instancia de Image (img).
Eh como se voce fizesse algo como isso:
>>> '2' + 1

Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
'2' + 1
TypeError: cannot concatenate 'str' and 'int' objects

Note o erro. Nao eh possivel concatenar uma string com um inteiro. Bem
parecido com o que voce esta tentando fazer.
Esse meu exemplo funcionaria em javascript (e algumas outras linguagens que
nao conheco muito bem), mas python eh fortemente tipada, nao e' possivel
misturar tipos desta maneira.

Tentando resolver teu problema entao...
Tu criou a instancia img a partir de uma string chamada infile. Se voce
tentar concatenar 'STOR' com essa string, notara que nao teras mais o mesmo
erro.
Nem analisei o resto do teu codigo. Mas acho que agora vais conseguir
prosseguir...

Pablo

Reply all
Reply to author
Forward
0 new messages