"Executar" - programa útil que executa comandos com histórico. PyGtk
Publicado por Marcos Melo 29/11/2004
[ Hits: 12.609 ]
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.
#!/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()
Lista Ligada - Versão Recursiva
O Journal no Linux para a guarda e consulta de logs do sistema
A evolução do Linux e as mudanças que se fazem necessárias desde o seu lançamento
Maquina modesta - a vez dos navegadores ferrarem o usuario
Fscrypt: protegendo arquivos do seu usuário sem a lentidão padrão de criptograr o disco
Sway no Arch Linux: configuração Inicial sem enrolação
Resolvendo o bloqueio do Módulo Warsaw no Arch Linux (Porta 30900)
Continuando meus tópicos anteriores (0)
Saída de loop após teste de if. (2)
Governo da França vai trocar Windows por Linux (9)
Warsaw não é reconhecido no Google Chrome 147.0.7727.55 [RESOLVIDO] (9)









