Subprocess.popen.send_signal (Strg_c_event) funktioniert nichtPython

Python-Programme
Anonymous
 Subprocess.popen.send_signal (Strg_c_event) funktioniert nicht

Post by Anonymous »

Ich habe ein Stück Python -Code, das eine unterbrechbare Aufgabe in einem untergeordneten Prozess hervorbringen sollte: < /p>

Code: Select all

class Script:
'''
Class instantiated by the parent process
'''

def __init__(self, *args, **kwargs):
self.process = None
self.start()

def __del__(self):
if self.process:
if self.process.poll() is None:
self.stop()

def start(self):
popen_kwargs = {
'executable': sys.executable,
'creationflags': 0 * subprocess.CREATE_DEFAULT_ERROR_MODE
| subprocess.CREATE_NEW_PROCESS_GROUP,
}
self.process = subprocess.Popen(['python', os.path.realpath(__file__)],
**popen_kwargs)

def stop(self):
if not self.process:
return
try:
self.process.send_signal(signal.CTRL_C_EVENT)
self.process.wait()
self.process = None
except KeyboardInterrupt:
pass

class ScriptSubprocess:
def __init__(self):
self.stop = False

def run(self):
try:
while not self.stop:
# ...
except KeyboardInterrupt:
# interrupted!
pass
finally:
# make a *clean* exit if interrupted
self.stop = True

if __name__ == '__main__':
p = ScriptSubprocess()
p.run()
del p
< /code>
und es funktioniert in einem eigenständigen Python -Interpreter einwandfrei. self.process.send_signal (signal.ctrl_c_event) 
hat nicht funktioniert und tatsächlich läuft der untergeordnete Prozess immer noch und wenn ich ihn manuell über Task -Manager beende, rufe der Aufruf an Selbst. Ctrl_c_event.

Code: Select all

Popen.send_signal(signal)

Sendet das Signalsignal an das Kind. Ctrl_c_event und
Strg_break_event können an Prozesse gesendet werden, die mit einem Parameter für Erstellungsflags gestartet werden, der create_new_process_group enthält.

Code: Select all

subprocess.CREATE_NEW_PROCESS_GROUP

Ein Popen creationFlags -Parameter, um anzugeben, dass eine neue Prozessgruppe erstellt wird. Dieses Flag ist für die Verwendung von os.kill () auf der Subprozess erforderlich. Subprozess mit ctrl_c_event in der realen Anwendung. (Wie ohne dieses Flag)
Da die reale Anwendung (d. H. Der übergeordnete Vorgang) auch setConoSoRtlHandler bestimmte Signale verwendet, versuche ich auch, CreationFlags mit Subprozess zu übergeben. Ctrl_c_event.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post