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

Reply via email to