[Twisted-Python] spawnProcess under Win32
Igor Kravtchenko
igor at mekensleep.com
Mon Aug 14 11:51:42 EDT 2006
Jean-Paul Calderone wrote:
> 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?
>
I don't thing.
What I have is a Windows SubSystem .exe (WinMain() entry point)
launching a bunch
of Consoles Subsystem .exe (main() entry point).
Since the applications are console based, it's not surprising to see them.
DETACHED_PROCESS does the trick and console applications have to
call AllocConsole() explicitly to open a console.
Igor.
More information about the Twisted-Python
mailing list