"Executar" - programa útil que executa comandos com histórico. PyGtk
Publicado por Marcos Melo 29/11/2004
[ Hits: 12.435 ]
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
O que é o THP na configuração de RAM do Linux e quando desabilitá-lo
Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Como unir duas coleções de ROMs preservando as versões traduzidas (sem duplicatas)
Como instalar o Telegram Desktop no Ubuntu 24.04
Overclocking Permanente para Drastic no Miyoo Mini Plus
Problemas de chaves (/usr/share/keyrings) no Debian
Converter os repositórios Debian para o novo formato com as chaves
eu preciso saber uma coisa sobre os games no linux (3)
eu preciso saber uma coisa sobre os games no linux (1)
Problema com audio apos upgrade (1)