"Executar" - programa útil que executa comandos com histórico. PyGtk
Publicado por Marcos Melo 29/11/2004
[ Hits: 12.286 ]
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()
Algoritmo de Euclides estendido em Python3
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Wifi não funciona no Aspire ES 15 com o Debian (8)
Como atualizar o Debian 8 para o 10 (10)
Dica sobre iptables ACCEPT e DROP (6)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (29)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta