2016-10-30 4 views
1

läuft auf Ubuntu 16.04 mit Python 2.7.12. Ich würde gerne überprüfen, ob die Liste der Programme auf dem Rechner installiert ist. Bisher habe ich diese nicht funktioniert Stück Code:prüfen, ob Programm von der Programmliste installiert ist

import subprocess 

program = ['rsync', 'locate'] 
    for x in program: 
    cmd = "dpkg-query -W " + x + " | grep -c " + x 
    process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE) 
    output, error = process.communicate() 

ich diesen Befehl ausführen kann, wenn ich mit dem Programm als String-Variable nicht:

exists = subprocess.call("dpkg-query -W rsync | grep -c 'rsync'", shell=True) 

und es gibt 0/1 . Können Sie mir helfen, eine Schleife zu erstellen, die zurückkehrt, wenn das Programm installiert ist oder nicht? Möglicherweise in 5 oder so Linien, alles, was ich brauche, ist einfach Wahr/Falsch (0/1). Danke

Antwort

0

Ich würde empfehlen, Pythons aptlibrary zu verwenden. Sie haben alle Funktionen zur Verfügung, die Sie derzeit brauchen scheinen. Momentan habe ich keine Zeit, eine Probe zur Verfügung zu stellen - wenn nötig werde ich das später machen.

+0

Ja, ich habe apt vorher benutzt, aber ich finde es etwas zu langsam, es dauert ein paar Sekunden, um apt.cache zu bekommen. Daher möchte ich vermeiden, apt-Modul zu verwenden. Und noch etwas, apt Modul ist nicht standardmäßig installiert, zumindest nicht in Ubuntu, also müsste ich es installieren, bevor ich es benutze. Ich möchte es so einfach und schnell wie möglich machen. Danke für den Vorschlag, obwohl –

3

können Sie verwenden Befehl -v

import subprocess 

list_cmd = ['rsync', 'locate', 'celery'] 

for cmd in list_cmd: 
    exist = subprocess.call('command -v '+ cmd + '>> /dev/null', shell=True) 
    if exist == 0: 
     print "I've got " + cmd 

Ihre cmds (in der Liste) muss für diese Lösung den Einsatz in Shell ausführbar sein.

+0

yep, das funktioniert perfekt, danke! Ich musste nur die Druckbefehlssyntax für Python 2.7 ändern (print "Ich habe" + cmd) –

+0

Ah ja ok, bearbeitet;) – Anton