Ich möchte ein Timeout für einen Subprozess verwenden
%Vor%Leider führt dies zu einem Zeitüberschreitungsfehler, jedoch nach 30 Sekunden. Es scheint, dass check_output den Shell-Befehl nicht unterbrechen kann.
Was kann ich auf der Python-Seite tun, um das zu stoppen? Ich vermute, dass subprocess32 den zeitgesteuerten Prozess nicht abbricht.
check_output()
mit Timeout ist im Wesentlichen :
Es gibt zwei Probleme:
.communicate()
kann auf absteigende Prozesse warten, nicht nur auf das unmittelbare Kind, siehe Python-Subprozess .check_call vs
.check_output
process.kill()
löscht möglicherweise nicht den gesamten Prozessbaum, siehe Wie man einen Python-Subprozess beendet, der mit shell = True gestartet wurde
Es führt zu dem von Ihnen beobachteten Verhalten: Die TimeoutExpired
passiert in einer Sekunde, die Shell wird getötet, aber check_output()
kehrt nur in 30 Sekunden zurück, nachdem das Enkelkind sleep
process beendet wurde.
Um die Probleme zu umgehen, beenden Sie den gesamten Prozessbaum (alle Subprozesse, die zur selben Gruppe gehören):
%Vor%Tags und Links python subprocess