Python 2.6 auf Windows: wie beende Teilprozess.Popen mit "shell=True" argument?

Gibt es eine Möglichkeit, um einen Prozess zu beenden, begann mit dem Teilprozess.Popen Klasse mit der "shell" - argument auf "True" gesetzt? In der Arbeitsgruppe minimal-Beispiel unten (unter Verwendung von wxPython) können Sie öffnen und beenden eine Notepad-Prozesses (Editor glücklich, aber wenn Sie ändern die Popen "shell" - argument auf "True", dann wird der Editor-Prozess nicht beenden.

import wx
import threading
import subprocess

class MainWindow(wx.Frame):

    def __init__(self, parent, id, title):        
        wx.Frame.__init__(self, parent, id, title)
        self.main_panel = wx.Panel(self, -1)

        self.border_sizer = wx.BoxSizer()

        self.process_button = wx.Button(self.main_panel, -1, "Start process", (50, 50))
        self.process_button.Bind(wx.EVT_BUTTON, self.processButtonClick)

        self.border_sizer.Add(self.process_button)
        self.main_panel.SetSizerAndFit(self.border_sizer)
        self.Fit()

        self.Centre()
        self.Show(True)

    def processButtonClick(self, event):
        if self.process_button.GetLabel() == "Start process":
            self.process_button.SetLabel("End process")
            self.notepad = threading.Thread(target = self.runProcess)
            self.notepad.start()
        else:
            self.cancel = 1
            self.process_button.SetLabel("Start process")

    def runProcess(self):
        self.cancel = 0

        notepad_process = subprocess.Popen("notepad", shell = False)

        while notepad_process.poll() == None: # While process has not yet terminated.
            if self.cancel:
                notepad_process.terminate()
                break

def main():
    app = wx.PySimpleApp()
    mainView = MainWindow(None, wx.ID_ANY, "test")
    app.MainLoop()

if __name__ == "__main__":
    main()

Bitte übernehmen Sie für die Zwecke dieser Frage, dass "shell" nicht gleichbedeutend mit "Wahr".

InformationsquelleAutor Wayne Koorts | 2009-03-30
Schreibe einen Kommentar