Wie man einen Teilprozess.Anruf timeout mit python 2.7.6?
Dieser hat wahrscheinlich schon gefragt, aber ich kann nicht finden, alles, was in Bezug auf einen Teilprozess.Anruf timeout bei der Verwendung von python 2.7
- einen Blick in: stackoverflow.com/questions/1191374/subprocess-with-timeout
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfache Weise bin ich immer timeouts mit 2.7 ist die Nutzung
subprocess.poll()
nebentime.sleep()
mit einer Verzögerung. Hier ist ein sehr einfaches Beispiel:Wenn Sie
x = 600
, dann ist dein timeout wären 10 Minuten. Währendtask.poll()
wird eine Abfrage durchgeführt, ob oder nicht der Prozess beendet wurde.time.sleep(delay)
schlafen für 1 Sekunde in diesem Fall, und dann Dekrementieren der timeout von 1 Sekunde. Sie können spielen, um mit diesem Teil zu Inhalt Ihres Herzens, aber das grundlegende Konzept ist überall gleich.Hoffe, das hilft!
subprocess.poll()
https://docs.python.org/2/library/subprocess.html#popen-objectstask.terminate()
tut praktisch das gleiche.Können Sie installieren
subprocess32
- Modul erwähnt von @gps -- die Rückportierung dersubprocess
- Modul von Python 3.2/3.3 für die Nutzung auf 2.x. Es funktioniert auf Python 2.7 und es enthält timeout-Unterstützung von Python 3.3.Unterprozess.call()
ist nurPopen().wait()
und daher zu unterbrechen, einen lang Laufenden Prozess intimeout
Sekunden:Wenn der Kind-Prozess kann am Ende eher dann eine tragbare Lösung ist, um verwenden Sie
Timer()
als Vorschlag in @sussudio Antwort:Unter Unix könnten Sie verwenden Sie
SIGALRM
als Vorschlag in @Alex Martelli Antwort:Zu vermeiden, die Verwendung von threads und Signale hier
subprocess
Modul für Python 3 verwendet eine busy-loop mit demwaitpid(WNOHANG)
ruft auf Unix undwinapi.WaitForSingleObject()
auf Windows.Können Sie versuchen, zu verwenden "easyprocess":
https://github.com/ponty/EasyProcess
Es hat viele Funktionen, die Sie benötigen, wie "timeout".
Können Sie subprocess32 erwähnt von @gps, die Rückportierung der Teilprozess standard-Bibliothek Modul von Python 3.2 - 3.5 für die Nutzung auf Python 2.
Erstens, installieren Sie die subprocess32 Modul:
Hier ist ein code-snippet:
Beachten Sie, Standard -
timeout=None
, was bedeutet, dass Sie nie timeout.In python 3.3 timeout argument wurde Hinzugefügt.
https://docs.python.org/3/library/subprocess.html#subprocess.call