"Executar" - programa útil que executa comandos com histórico. PyGtk
Publicado por Marcos Melo 29/11/2004
[ Hits: 12.594 ]
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
Como rodar o Folding@home no Linux
Criando um painel de controle (Dashboard) para seu servidor com o Homepage
O Abismo entre o Código e o Chão: Saltos Tecnológicos e a Exclusão Estrutural no Brasil
Instalar e Configurar a santíssima trindade (PAP) no Void Linux
NixOS + NVIDIA antiga: como sobreviver ao driver 595 (GTX 750 Ti / Maxwell)
Conhecendo o tmux: Multiplexador de Terminal
Acessando página do Syncthing fora da máquina local
[Resolvido] Meu monitor suporta 100fps. Por que o máximo é 60fps nos jogos?
OpenClaude - toda IA joga mais que neymar (5)
SystemD e mais polêmicas. (10)
Novos requisitos de sistema para a versão 26.04 (4)









