2016-11-16 2 views
0

Say iDer beste Weg, um eine Funktion alle x Sekunden auszuführen, dann töten und wiederholen?

import subprocess 
subprocess.call(["foo"]) 

Meine Frage ist, tun wollen, wie könnte ich subprocess.call ([ "foo"]) alle x Sekunden, dann töten den Prozess, dann wiederholen x Sekunden später laufen?

+1

Sie eine unendliche am Ende es while-Schleife und Schlaf tun können – Jalo

+0

Nicht eine Antwort in Python, aber Sie könnten 'bash's' timeout' verwenden –

+0

'dann den Prozess beenden' Wann möchten Sie den Prozess beenden? Wie lange soll es laufen? –

Antwort

1

Um einen Befehl alle x Sekunden Sie eine Endlos-Schleife verwenden können und time

import os 
import signal 
import subprocess 
import time 

cmd = "python -m SimpleHTTPServer" 

while True: 
    server = subprocess.Popen(cmd , stdout=subprocess.PIPE, shell=True, 
         preexec_fn=os.setsid) 

    time.sleep(10) 
    os.killpg(os.getpgid(server.pid), signal.SIGTERM) 
    time.sleep(5) 

Wenn Sie nicht wissen, laufen, wie der Prozess zu stoppen, empfehle ich Ihnen https://stackoverflow.com/a/4791612/2588566

Wenn Sie nur zu prüfen, Möchten Sie, dass der Prozess x Zeit zum Schlafen ausgeführt wird, verwenden Sie stattdessen eine for Schleife.

Ich weiß nicht, welchen Befehl Sie ausführen möchten. In diesem Beispiel führen Sie einen Python-Server aus, der Dateien im aktuellen Verzeichnis bereitstellt. Es startet den Prozess, hält es für 10 Sekunden, dann den Prozess zu beenden und wartet 5 Sekunden (So können Sie überprüfen, dass es gestoppt wurde). Sie haben also einen Server mit 10 Sekunden und einer Lücke von 5 Sekunden zwischen jeder Ausführung.

+0

Bitte füllen Sie den 'Here goes your command' Teil. Wie würdest du einen Prozess beginnen und töten? –

+0

@LutzHorn Ich habe ein Beispiel hinzugefügt –

0

subprocess.call kehrt nicht zurück, bis der Prozess foo beendet ist.

Führen Sie den von args beschriebenen Befehl aus. Warten Sie, bis der Befehl abgeschlossen ist, und geben Sie das Rückgabecodeattribut zurück.

Verwenden Sie stattdessen Popen.

import subprocess 
import time 

while True: 
    # The process will take 10 seconds to finish, but ... 
    p = subprocess.Popen(["sleep", "10"]) 

    # ... we kill it after 5 seconds. 
    time.sleep(5) 
    p.kill() 
0

Es gibt ein System von Anweisungen durchgeführt werden kann. Code muss nicht um den Zyklus zu setzen, von der Hauptfunktion starten, die Umsetzung der Ausgabe und Ruhe, und starten Sie den Prozess

import time 
import sys 
import os 

def restart_program(): 
    python = sys.executable 
    os.execl(python, python, * sys.argv) 

if __name__ == "__main__": 
    print 'start...' 
    print "sleep 3s..." 
    time.sleep(3) 
    restart_program() 
Verwandte Themen