Descobrir se um programa está instalado a partir do script Python3

5

Dentro do meu software python3, preciso verificar se o git está instalado. Eu sei que a partir do terminal eu posso digitar:

dpkg --get-selections > filename

para descobrir quais programas estão instalados e, em seguida, colocar isso em um arquivo.

De lá, como eu obteria python para ver se o git está instalado? Ou há uma maneira mais fácil?

    
por Eden Crow 18.04.2011 / 13:18

5 respostas

4

Você pode usar o módulo apt python, mas ele só verifica se o pacote está instalado. Ele falhará nas distribuições não-deb ou, se instalado fora do gerenciador de pacotes:

import apt
cache = apt.Cache()
cache.open()
 cache["git-core"].is_installed# Evaluates true if git is installed

Tente executar o git e lidar com a exceção se ela falhar:

import subprocess

try:
    # pipe output to /dev/null for silence
    null = open("/dev/null", "w")
    subprocess.Popen("git", stdout=null, stderr=null)
    null.close()

except OSError:
    print("git not found")

Uma terceira opção seria testar todos os caminhos em $PATH e testar se você tem permissão de execução no caminho / git.

    
por Egil 18.04.2011 / 14:13
1

Procure por arquivos instalados

Supondo que sabemos onde o lançador ou binário do aplicativo está instalado por padrão, uma abordagem fácil de fazer seria apenas verificar sua existência como:

#! /usr/bin/env python3
#
# Query package state by installation path

import os.path
path = '/usr/bin/git'


def query_package(path):
    if os.path.exists(path):
        print('Git is ready to use')
    else:
        print('please install Git')

Consultar DPKG

Outra maneira de consultar os pacotes instalados é consultar o gerenciamento de pacotes, no nosso caso o dpkg:

#! /usr/bin/env python3
#
# Query package state by dpkg status

import subprocess
package = 'git'

def query_package(package):
    status = subprocess.getstatusoutput("dpkg-query -W -f='${Status}' " + package)
    if not status[0]:
        print(status[1]) # package is installed
    else:
        print(status[1])
    
por Takkat 18.04.2011 / 20:02
0

Se você quisesse fazer assim, poderia fazer algo como:

checkvar = 0  
for line in open("filename"):  
    if "git" in line:  
        checkvar = checkvar + 1  
print "Phrase git found ", checkvar, " times"
    
por RobotHumans 18.04.2011 / 14:00
0

Eu teria uma abordagem diferente. Para verificar se o Git está disponível em um determinado sistema, verifique se o binário git existe no PATH do usuário ou tente executar git --version . Esta verificação será mais confiável, e suporta pessoas que (por qualquer motivo) instalam o Git a partir da fonte em / usr / local / bin, ou mesmo ~ / bin.

Esta não é uma resposta direta à sua pergunta, mas espero que ajude mesmo assim. Se você precisar de ajuda para codificar isso em Python, me avise e forneço mais detalhes.

    
por Adam Byrtek 18.04.2011 / 18:38
0

Você também pode tentar verificar a saída de which .

(Talvez isso não funcione como ninguém sugeriu?)

    
por Broam 18.04.2011 / 20:58

Tags