2016-07-11 22 views
0

Ich suche nach einer Möglichkeit, mit einem Python-Skript zu überprüfen, wenn ein Dienst installiert ist. Zum Beispiel, wenn ich als ein SSH-Server überprüfen möge in installiert/Laufen/unten in der Befehlszeile, habe ich:Wissen, ob ein Dienst installiert ist

service sshd status 

Wenn der Dienst nicht installiert ist, habe ich eine Meldung wie diese:

sshd.service 
    Loaded: not-found (Reason: No such file or directory) 
    Active: inactive (dead) 

Also habe ich einen Unterprozess check_output verwendet, um diese drei Zeile zu bekommen, aber das Python-Skript funktioniert nicht. Ich habe shell = True verwendet, um die Ausgabe zu erhalten, aber es funktioniert nicht. Ist es die richtige Lösung zu finden, ob ein Service installiert ist oder eine andere Methode existiert und viel effizienter ist?

meine Python Es Skript ist:

import subprocess 
from shlex import split 

output = subprocess.check_output(split("service sshd status"), shell=True) 

if "Loaded: not-found" in output: 
    print "SSH server not installed" 

Die Probleme mit diesem Code ein subprocess.CalledProcessError ist: Befehl zurückgegeben Nicht-Null Exit-Status 1. Ich weiß, das ist, wenn eine Rückkehr Kommandozeile etwas, was nicht der Fall ist vorhanden, aber ich brauche das Ergebnis, wie ich den Befehl in einer Shell schreiben

Antwort

0

einfach den Fehler fangen und vermeiden shell=True:

import subprocess 

try: 
    output = subprocess.check_output(["service", "sshd", "status"], stderr=subprocess.STDOUT) 
except subprocess.CalledProcessError as e: 
    print(e.output) 
    print(e.returncode) 
+0

Das Programm sagte mir: Befehl '[' Service ',' shd ',' Status ']' gab nicht-Null Ausgangsstatus 3. Es ist nicht die gleiche Zeile wie der Shell-Befehl und ich kann nicht wissen, ob der Dienst ist installiert oder nicht –

+0

'shd' oder' sshd'? –

+0

Fehler, sorry, es ist sshd in meinem Code –

0

Wählen Sie einen anderen systemctl Anruf, die für bestehende und nicht vorhandene Dienste unterscheidet. Zum Beispiel

systemctl cat sshd 

werden Exit-Code 0 zurück, wenn der Dienst vorhanden ist und 1, wenn nicht. Und es sollte ziemlich einfach zu überprüfen sein, oder?

+0

Ich brauche meinen Skript anpassen, aber es funktioniert auch dann, wenn der Dienst beendet wird. Danke!! –

Verwandte Themen