Have you tried spawning "pythonw.exe" instead of "python.exe"? http://bugs.python.org/issue3905 might help you.
A bit of googling suggests this is a recurring issue with subprocess and non-windowed applications. On Wed, Jun 19, 2013 at 3:20 PM, Patrick Tisdale <patrick.tisd...@gmail.com>wrote: > I can get rid of the shell=1 using subprocess.Popen(["python.exe", > "C:\\Python27\\Scripts\\test.py"]). This also works fine using debug > mode. I can kill it via os.kill() or Popen.send_signal(). > > It also runs fine via "net start". But when I stop it via "net stop", it > gives me the following error: > ok.kill(self.pid, signal.CTRL_BREAK_EVENT) > WindowsError: (6, 'The handle is invalid') > > I have verified that Popen.pid matches the PID of python.exe in tasklist. > > The python docs say that on windows, os.kill() also takes a handle. I > tried passing it Popen._handle (and int(Popen._handle)), but it still says > the handle is invalid. > > Any idea why the handle would be invalid? > > Patrick > > > On Tue, Jun 18, 2013 at 11:13 PM, Mark Hammond > <skippy.hamm...@gmail.com>wrote: > >> The other solutions I can think of are likely heavier and harder than >> arranging to spawn the child without shell=1 - so I'd suggest tackling that. >> >> Or *maybe* - you could do something like spawning a thread in the child >> process to read from stdin - that's likely to block until the cmd.exe >> parent is killed, in which case the read would return with an error - at >> which point the child could terminate itself... >> >> Mark >> >> >> On 19/06/2013 7:51 AM, Patrick Tisdale wrote: >> >>> Hello list, >>> I have written a test script to run as a service. The service starts up >>> properly, and spawns a subprocess (called test.py) using >>> subprocess.Popen. However, I am having no luck killing the subprocess >>> when I stop the service. I am using os.kill() >>> >>> It works fine when running pythonservice.exe in debug mode. But when I >>> start it using "net start" the subprocess.Popen.pid matches the "cmd" >>> that it spawns (due to shell=True, I suppose). I have tried it without >>> shell=True, but can't get the script to run without it. >>> >>> >>> The test script is a simple script that periodically writes to a file. >>> The script that I actually need to make work is a twisted twistd (.tac) >>> file, which will have multiple TCP connections open, and I need to be >>> able to close those connections before it exits. >>> >>> Any ideas on what I'm missing? >>> >>> Thanks, >>> Patrick Tisdale >>> >>> >>> ______________________________**_________________ >>> python-win32 mailing list >>> python-win32@python.org >>> http://mail.python.org/**mailman/listinfo/python-win32<http://mail.python.org/mailman/listinfo/python-win32> >>> >>> >> > > _______________________________________________ > python-win32 mailing list > python-win32@python.org > http://mail.python.org/mailman/listinfo/python-win32 > >
_______________________________________________ python-win32 mailing list python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32