Jump to content

[Python] Executar sudo aptitude


Recommended Posts

Um programa que faz o upgrade, update, search e install com o sudo aptitude:

#COMSUDO
#coded by Mako
#Abril de 2008

import os
import sys

def limpar():
       os.system("clear")

def sair():
       limpar()
       print "Ate a proxima..."
       sys.exit()

def opcao_errada():
       print "Opcao inexistente"

def update():
       os.system("sudo aptitude update")

def upgrade():
       os.system("sudo aptitude upgrade")

def procura():
       chave = raw_input("Digite o que pretende procurar: ")
       comando = "sudo aptitude search " + chave
       os.system(comando)

def instala():
       chave = raw_input("Digite o que pretende instalar: ")
       comando = "sudo aptitude install " + chave
       os.system(comando)

def main():
       limpar()
       while true:
               print ""
               print "O que pretende fazer?"
               print "1 --> Update do sistema"
               print "2 --> Upgrade do sistema"
               print "3 --> Procurar"
               print "4 --> Instalar"
               print "0 --> Sair"

               opcao = raw_input()
               if opcao == "1":
                       update()
               elif opcao == "2":
                       upgrade()
               elif opcao == "3":
                       procura()
               elif opcao == "4":
                       instala()
               elif opcao == "0":
                       sair()
               else:
                       opcao_errada()

main()
Link to comment
Share on other sites

Versão reduzida com exactamente as mesmas funções só para ajudar  😁


import os       
def executa(x):
    try:
        os.system(x)
    except:
        print "Alguma coisa correu mal, tem aptitude?"


os.system("clear")
while True:
    print """
O que pretende fazer?
1 --> Update do sistema
2 --> Upgrade do sistema
3 --> Procurar
4 --> Instalar
0 --> Sair"""

    opcao = raw_input()
    if opcao == "1":
        executa("sudo aptitude update")
    elif opcao == "2":
        executa("sudo aptitude upgrade")
    elif opcao == "3" or opcao == "4" :
        
        nome="search"
        display="pesquisar"
        if opcao=="4":
            nome="install"
            display="instalar"
                        
        chave = raw_input("Digite o que pretende %s: " %display)
        comando = "sudo aptitude %s %s " %(nome, chave)
        executa(comando)
    elif opcao == "0":
        executa("clear")
        print "Ate a proxima..."
        quit()
    else:
        print "Opcao inexistente"


RHCE - 120-062-534

Link to comment
Share on other sites

ta fixe newbeen. achei foi esta parte um bocado confusa


    elif opcao == "3" or opcao == "4" :
        
        nome="search"
        display="pesquisar"
        if opcao=="4":
            nome="install"
            display="instalar"
                        
        chave = raw_input("Digite o que pretende %s: " %display)
        comando = "sudo aptitude %s %s " %(nome, chave)
        executa(comando)

]

E  ja agora ...

Estás a usar as funções como um "armazém". Porque não experimentas uma classe? 😛 Ou então as funções de uma só linha, tipo a tua update, pões directamente no código principal da main.

... da me ai um exemplo de uma class pra eu aprender a fazer isso.

😉

Link to comment
Share on other sites

Para reproduzir fielmente o efeito que tu tens, podes usar algo assim

import os
import sys

class Apt:
def limpar(self):
	os.system("clear")
def sair(self):
	self.limpar()
	print "Ate a proxima"
	sys.exit()
def opcao_errada(self):
	print "Opcao inexistente"
def update(self):
	os.system("sudo aptitude update")
def upgrade(self):
	os.system("sudo aptitude upgrade")
def procura(self):
	chave = raw_input("Digite o que pretende procurar: ")
	comando = "sudo aptitude search" + chave
	os.system(comando)
def instalar(self):
	chave = raw_input("Digite o que pretende instalar: ")
	comando = "sudo aptitude install " + chave
	os.system(comando)

Depois podias usar algo do género:

apt_client = Apt()
apt_client.update()
apt_client.upgrade()

etc.

Por acaso tenho aqui uma versão que fiz que tem umas coisas um pouco mais diferentes (tracebacks e o caraças), por isso não vou fazer spoilers 😉 (É praticamente igual ao teu programa nas coisas que faz).

Não me responsabilizo por qualquer dano ocorrido no seguimento dos meus conselhos. Prontos, a minha pessoa está oficialmente protegida legalmente 😄

Link to comment
Share on other sites

import os
import warnings
import subprocess

class Apt:
    def __init__(self):
        if os.environ["LOGNAME"] != "root":
            warnings.warn("User is not root")
            self.is_root = 0
        else:
            self.is_root = 1

    def _run_command(self, command): # Internal Command
        "Runs a command with subprocess.call module"
        try:
            subprocess.call(command, shell=True)
        except OSError:
            print "File or program not found."
        except:
            import traceback
            print "Bad Voodoo happened."
            print "Dumping information on screen."
            print "----------------------------------------------"
            traceback.print_exc()
            print "----------------------------------------------"
            if raw_input("Executar PDB? ").lower() in ("sim", "s", "yes", "y"):
                import pdb
                pdb.set_trace()

    def search(self, package):
        "Search for the package's name with apt-cache search"
        print "apt-cache search %s" % package
        self._run_command("apt-cache search %s" % package)

    def install(self, package):
        "Install the package with apt-get"
        if self.is_root:
            self._run_command("apt-get install %s" % package)
        else:
            self._run_command("sudo apt-get install %s" % package)

    def update(self):
        "Runs apt-get update"
        if self.is_root:
            self._run_command("apt-get update")
        else:
            self._run_command("sudo apt-get update")

    def upgrade(self, dist_upgrade=0):
        "Runs apt-get upgrade. If dist_upgrade is 1, then use apt-get dist-upgrade"
        if self.is_root:
            if dist_upgrade:
                self._run_command("apt-get dist-upgrade")
            else:
                self._run_command("apt-get upgrade")
        else:
            if dist_upgrade:
                self._run_command("sudo apt-get dist-upgrade")
            else:
                self._run_command("sudo apt-get upgrade")

def main():
    apt_client = Apt()
    done = 0
    while not done:
        print """
1) Search
2) Install
3) Update
4) Upgrade
5) Dist-Upgrade
6) Quit
"""

        choice = raw_input(">> ")
        if choice == "1":
            apt_client.search(raw_input("Name: "))
        elif choice == "2":
            apt_client.install(raw_input("Name: "))
        elif choice == "3":
            apt_client.update()
        elif choice == "4":
            apt_client.upgrade()
        elif choice == "5":
            apt_client.upgrade(dist_upgrade=1)
        elif choice == "6":
            done = 1
        else:
            print "Unknown Option!"

main()

Tal como disse, é praticamente igual ao teu, excepto no facto de verificar se o utilizador está como root ou não (porque o sudo não funciona em todas as debian-based distros), na opção de usar o dist-upgrade em vez de upgrade, usar o subprocess.call em vez de os.system e o apt-get/install em vez do aptitude.

O menu foi feito assim à pressa, porque quando fiz isto não cheguei a fazer um menu para ele 😉

Não me responsabilizo por qualquer dano ocorrido no seguimento dos meus conselhos. Prontos, a minha pessoa está oficialmente protegida legalmente 😄

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.