Ich möchte einen ziemlich lang laufenden Subprozess in Python starten, und möchte es mit ^C
beenden können. Das Drücken von ^C
führt jedoch dazu, dass das übergeordnete Objekt KeyboardInterrupt
empfängt und beendet (und manchmal sleep
als nicht mehr vorhandener Prozess verlässt).Target KeyboardInterrupt zu Subprozess
import subprocess
subprocess.call("sleep 100".split())
Wie kann ich es so haben, dass ^C
nur Drücken beendet den sleep
Prozess (wie wir auf einer Shell-Befehlszeile haben würde), und lassen Sie die Eltern weitermachen? Ich glaube, ich habe versucht, einige Kombinationen von preexec_fn
, start_new_session
und shell
Flags zu call
, aber mit keinem Erfolg.
bearbeiten: Ich weiß, ich kann die subprocess
Aufruf in einem try-catch
Block wickeln, und ignorieren Sie die Tastatur-Interrupt; aber ich will das nicht tun. Meine Frage ist folgende: Der Tastatur-Interrupt hätte sleep
töten sollen und hätte das Ende davon sein sollen. Warum wird dann sozusagen auf den Elternteil propagiert. Oder ist es wie der sleep
Prozess war nie derjenige, der den Interrupt erhalten? Wenn nicht, wie würde ich es zum Vordergrundprozess machen?
Wieder versuche ich, die Eltern-Kind-Beziehung einer Befehlszeile zu emulieren. Wenn ich das Äquivalent in einer Befehlszeile machen würde, könnte ich ohne zusätzliche Behandlung davonkommen.
Mögliche Duplikat [Wie ein Python subprocess mit Shell = True gestartet beenden] (http://stackoverflow.com/questions/4789837/how-to-terminate-a -python-subprocess-lanced-with-shell-true) –