[Twisted-Python] spawnProcess under Win32

Jean-Paul Calderone exarkun at divmod.com
Mon Aug 14 11:31:49 EDT 2006


On Mon, 14 Aug 2006 17:02:07 +0200, Igor Kravtchenko <igor at mekensleep.com> wrote:
>glyph at divmod.com wrote:
>>
>>
>>On Mon, 14 Aug 2006 15:15:55 +0200, Igor Kravtchenko <igor at mekensleep.com> 
>>wrote:
>>>Hi!
>>
>>>I've looked at the way Twisted creates a process under Win32 and I've 
>>>noticed
>>>that it uses the CreateProcess() function.  The problem is it doesn't 
>>>mention any
>>>creation flags (i.e.: it just passes 0) whereas here, we would need to 
>>>pass
>>>DETACHED_PROCESS to avoid a new console to be created.
>>
>>>I would be interested to know what do you think about this?
>>>Does it seem to you a good idea?
>>
>>
>>Well, we do have a UNIX-specific argument to spawnProcess (usePTY), so I 
>>don't see why we couldn't have a Win32-specific argument as well.  However, 
>>"win32flags" seems like a pretty vague name, especially since it could be 
>>CreateProcess's dwCreationFlags argument or STARTUPINFO's dwFlags 
>>attribute.
>>
>>Also, depending on context, you might want CREATE_NO_WINDOW or 
>>DETACHED_PROCESS or possibly both.
>>
>>I believe the right thing to do is to come up with some typical features of 
>>the Windows process environment and support them explicitly.  I don't 
>>believe all the flags you can pass to CreateProcess are compatible with the 
>>way Twisted expects subprocesses to behave, and I am definitely sure that 
>>not all the things you can put in STARTUPINFO are.
>>
>Hi,
>
>yes I see your point of view.
>I deliberately passed that Win32 flags since I didn't wanted to get in 
>details
>of what kind of Win32 features we need or not.
>It can indeed potentially breaks Twisted behavior if incorrect flags are 
>passed.
>
>However it's just easier even if less secure.  Otherwise, you have to 
>enumerate
>all kind of features users want and implement them explicitly while having 
>the
>correct code guard to prevent from crash or incorrect behavior.
>
>I don't know about other Win32 developpers.  From my side, I just wanted
>a way to prevent a console to be opened, so might be something like an
>explicit CREATE_NO_CONSOLE flag or such.

It's easier on the Twisted side.  It's harder on application developers,
since they have to know if they want to pass CREATE_NO_CONSOLE or
CREATE_NO_WINDOW or DETACHED_PROCESS or some combination or some other flag
entirely.

It also makes it completely non-portable to other platforms.  It's difficult
to do anything with subprocesses cross-platform, but the goal should be to
make it possible and then easy.  Requiring Win32 flags to be passed in is
complete capitulation.

I also wonder why I have never noticed this behavior.  For example, I have
run buildslaves on Win32 and never noticed them popping up console windows.
Does this behavior differ between different version of Windows?

Also, please don't top-post.  

Jean-Paul




More information about the Twisted-Python mailing list