2012-04-07 9 views
1

Ich schreibe ein Python-Programm für Linux und das Programm verwendet im Grunde das Terminal gibt dem Benutzer Feedback über seine Initialisierung und dann muss es die Kontrolle über das Terminal abgeben und seine Ausführung im Hintergrund fortsetzen. Wie kann ich das erreichen?Wie kann das Programm die Kontrolle über das Terminal aufgeben?

Danke

+1

Sie könnten Ihr Skript einfach so ausführen: 'python script.py &' oder den Prozess mit den Antworten in dieser Frage dämonisieren: http://stackoverflow.com/questions/473620/how-do-you-create- a-daemon-in-python – Collin

Antwort

2

Sie können os.fork() verwenden, um ein Kind-Prozess zu erstellen:

import os 
import time 

msg = raw_input("Enter message for child process") 

x = os.fork() 

if not x: 
    for i in range(5): 
     time.sleep(3) 
     print msg 

os.fork() 0 zurück in den untergeordneten Prozess, und das Kind Prozess-ID in der paret Prozess Beachten Sie, dass jeder Prozess erhält eine eigene Kopie der lokalen Variablen.

this helps

+0

Einfach und elegant. Danke – Raphael

1

Forking wahrscheinlich das Richtige ist, hier zu tun, und daemonising besser, aber eine einfache Möglichkeit, meist den gleichen Effekt zu erhalten, ohne das Skript zu ändern ist (als Kommentar auf der Frage schlägt) um das Skript einfach in den Hintergrund zu stellen.

Was & nicht tut, ist jedoch vollständig die Verbindung zum Terminal aufzugeben. Dafür verwenden nohup:

(nohup python foo.py >foo-output &) 

ist eine einfache Möglichkeit, ein Skript von daemonising. Die nohup bedeutet, dass der Prozess nicht beendet wird, wenn das steuernde Terminal geht, und das Skript in den Hintergrund einer Subshell (...) setzt, die dann beendet wird, bedeutet, dass es als Kind des init-Prozesses endet. Das ist das meiste von dem, was "Daemonisierung" bedeutet.

Dies ist eine allgemeinere Technik als die ursprüngliche Frage wirklich fordert, aber es ist dennoch nützlich.

Verwandte Themen