Ich schreibe gerade mein erstes Python-Programm (in Python 2.6.6). Das Programm erleichtert das Starten und Stoppen verschiedener Anwendungen, die auf einem Server ausgeführt werden und dem Benutzer allgemeine Befehle bereitstellen (wie das Starten und Stoppen von Systemdiensten auf einem Linux-Server).Wie kann ich einen Prozess starten und in Python im Hintergrund anzeigen?
Ich beginne die Startskripten Anwendungen von
p = subprocess.Popen(startCommand, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err = p.communicate()
print(output)
Das Problem ist, dass das Startskript von einer Anwendung im Vordergrund bleibt und so p.communicate() wartet für immer. Ich habe bereits versucht, "nohup startCommand &" vor dem startCommand zu verwenden, aber das hat nicht wie erwartet funktioniert.
Als Abhilfe verwende ich jetzt den folgenden Bash-Skript die Anwendung des Startskript zu nennen:
#!/bin/bash
LOGFILE="/opt/scripts/bin/logs/SomeServerApplicationStart.log"
nohup /opt/someDir/startSomeServerApplication.sh >${LOGFILE} 2>&1 &
STARTUPOK=$(tail -1 ${LOGFILE} | grep "Server started in RUNNING mode" | wc -l)
COUNTER=0
while [ $STARTUPOK -ne 1 ] && [ $COUNTER -lt 100 ]; do
STARTUPOK=$(tail -1 logs/SomeServerApplicationStart.log | grep "Server started in RUNNING mode" | wc -l)
if ((STARTUPOK)); then
echo "STARTUP OK"
exit 0
fi
sleep 1
COUNTER=$(($COUNTER + 1))
done
echo "STARTUP FAILED"
Der Bash-Skript aus meinem Python-Code genannt wird. Diese Problemumgehung funktioniert perfekt, aber ich würde es vorziehen, alles in Python zu tun ...
Ist subprocess.Popen den falschen Weg? Wie kann ich meine Aufgabe nur in Python erledigen?
wahrscheinlich eine dup von http://StackOverflow.com/Questions/1196074/start- a-background-process-in-python – daTokenizer
Verwenden Sie einfach "kommunizieren", wenn es benötigt wird .. Sie müssen die Ergebnisse nicht überprüfen? vermeiden Sie es einfach ... – klashxx
@Klashxx: Ich brauche die Ergebnisse. Das ist mein Problem ... (muss die Ausgabe überprüfen für "Server gestartet im RUNNING-Modus") – Ronzo