"Executar" - programa útil que executa comandos com histórico. PyGtk

Publicado por Marcos Melo 29/11/2004

[ Hits: 12.192 ]

Download executar.py




Executa comandos e armazena no arquivo ".executarme",no HOME do usuário.
Usa o  módulo os para os.env() e os.system(). Do gtk, usamos uma GtkWindow (a janela),  um GtkEntry (a caixa de texto para digitar o comando), um GtkLabel(este ficou sem utilidade, por deficiência minha), um GtkButton, para executar o comando, e um GtkClist, para  listar  comandos  anteriores gravados no arquivo ".executarme".
Serve para aprendizado e para execução. Dá para aprender modificando e adaptando.

  



Esconder código-fonte

#!/usr/bin/env python
from gtk import *
import os
#    este programa executa comandos e os armazena no arquivo ".executarme",
#   no HOME do usuário.
#   
#   O programa do módulo "os" para "os.env()" e "os.system()",  este pra-
#   ticamente a "alma" do programa.
#   D módulo gtk, usamos uma GtkWindow (a janela, propriamente dita),  um   
#   GtkEntry (a caixa de texto onde será digitado o comando), um GtkLabel
#   (este ficou sem utilidade, por deficiência minha), um GtkButton, para
#   executar o comando, e um GtkClist, para  listar  comandos  anteriores 
#   gravados no arquivo ".executarme".
#----------------------------------------------------------------------------
#    determinando o diretório home
homi=os.getenv("HOME")


#   nas linhas abaixo:
#    tentando abrir  o arquivo .executarme em modo escrita e leitura
#   não existindo  o arquivo, será disparado um erro (na verdade, o
#    erro só seria gerado se o programa tentasse abrir o arquivo pa-
#    ra leitura, mas resolvi deixar assim mesmo...). O erro é trata-
#   do na linha except
try:
   arquivo=open(homi + "/.executarme",'a+')
   print "arquivo ja existia"
except IOError, e:
   arquivo=open(homi + "/.executarme",'w')
   print "arquivo criado"

#    esta função é chamada quando uma linha na CList é selecionada, e 
#    só faz colocar na caixa de texto o conteúdo da linha
#-------------------------------------------------------------------------
def cb_select_row(clist, row, col, user_data,linhas, entrada_de_comandos):
   entrada_de_comandos.set_text(linhas[row])

#-------------------------------------------------------------------------
#   aqui é que o comando é executado, com os.system().
#   a variável "a" deveria receber um inteiro determinando o sucesso
#   da operação, mas o uso do caractere "&" acrescentado no final do
#   comando acabou com a graça. Por isso eh impossivel determinar se 
#    o comando digitado eh valido ou nao. Sem o "&", a janela ficaria
#   travada, esperando o término do programa chamado.
def executa(widget,text, lab,wind,arquiv,listao):
   wind.set_title("teste")

   a=os.system(entrada_de_comandos.get_text() + " 2>>/dev/null &")
   comando=entrada_de_comandos.get_text()
   #verifica se o comando ja consta no arquivo, para gravar 
   if comando in listao:
      pass
   else:
      arquiv.write(text.get_text() +'\n')
   entrada_de_comandos.set_text("")
   print a
   #aqui nao tem o menor sentido mais
   lab.set_text("Resultado: " + str(a))
   #encerra o programa
   mainquit()
   
#------------------------------------------------------------------------
#   declarando a janela e suas dimensoes
win=GtkWindow()
win.set_usize(300,350)
#   declarando um VBox, onde serao organizados os outros widgets
box=GtkVBox(spacing=10)
win.add(box)
box.set_border_width(10)
#   a caixa de texto:
entrada_de_comandos=GtkEntry()
box.pack_start(entrada_de_comandos,FALSE,FALSE,4)
entrada_de_comandos.show()
label_mensagens=GtkLabel("test")

botao=GtkButton("Executar")
box.pack_start(botao,False,False)
botao.show()
box.pack_start(label_mensagens,False,False)
bar=GtkScrolledWindow()

label_mensagens.show()
#    a CList
caixa_de_comandos=GtkCList(1,titles=["comandos"])
caixa_de_comandos.set_column_width(1,100)

bar.add(caixa_de_comandos)
bar.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC)

caixa_de_comandos.set_selection_mode(SELECTION_SINGLE)
caixa_de_comandos.set_selection_mode(SELECTION_BROWSE)

box.pack_start(bar)
bar.show()


linhas=arquivo.readlines()
linhas.sort()
ultimo=""
li=[""]
comando_armazenado=[]
#   Preenchendo a CList
for li in linhas:
   if ultimo!=li:#só para não repetir um comando na lista
      item=li[0:-1]
      if item>"":
         comando_armazenado.append(item)
         caixa_de_comandos.append([item])
   ultimo=li
caixa_de_comandos.connect("select_row", cb_select_row, comando_armazenado,entrada_de_comandos)
caixa_de_comandos.show()
#
entrada_de_comandos.connect("activate",executa,entrada_de_comandos,label_mensagens,win,arquivo,comando_armazenado)

botao.connect("clicked",executa,entrada_de_comandos,label_mensagens,win,arquivo,comando_armazenado)

box.show()
win.show()
win.connect("destroy",mainquit)

mainloop()

Scripts recomendados

Equação de 2º grau no Tkinter

Jogo de truco em python.

Cálculo de IPI

Algoritmo de Euclides estendido em Python3

numero magico 1089


  

Comentários
[1] Comentário enviado por acefalo em 30/11/2004 - 00:39h

Algumas modificações/melhorias sugeridas para quem quiser usar e abusar do programa:
-Manter o programa aberto, atualizando a lista de comandos;
-Determinar se o comando foi executado com sucesso (ainda não sei fazer isso sem travar o programa à espera do término do processo filho). Talvez fosse necessário substituir o os.system() por outro método, que eu desconheço;
-Acessar também o .bash_history, dando opção ao usuário de listar ou não;
-Inserir um console na janela (dá para fazer isso?)


[2] Comentário enviado por xerxeslins em 15/05/2008 - 20:29h

desculpe a ignorância.. como executo esse script?
valeu


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts