"Executar" - programa útil que executa comandos com histórico. PyGtk
Publicado por Marcos Melo 29/11/2004
[ Hits: 12.476 ]
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
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Preciso recuperar videos *.mp4 corrompidos (6)
É normal não gostar de KDE? (11)
Secure boot, artigo interessante, nada técnico. (2)









