"Executar" - programa útil que executa comandos com histórico. PyGtk
Publicado por Marcos Melo 29/11/2004
[ Hits: 12.333 ]
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
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
VMs e Interfaces de Rede desapareceram (12)
Instalação do drive do adaptador wiffi (7)