[Tutor] os.system vs subprocess.Popen args problems

eryksun eryksun at gmail.com
Wed Sep 4 14:07:22 CEST 2013


On Wed, Sep 4, 2013 at 7:11 AM, Oscar Benjamin
<oscar.j.benjamin at gmail.com> wrote:
> On 4 September 2013 11:42, eryksun <eryksun at gmail.com> wrote:
>>>>     si = subprocess.STARTUPINFO()
>>>>     si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
>>>>     si.wShowWindow = subprocess.SW_HIDE
>>>
>>> Do these statements modify module-level state? Or do you need to pass
>>> startupinfo=si when calling Popen?
>>
>> It's a documented option for instances of Popen, to configure a few
>> fields in the STARTUPINFO struct that gets passed to CreateProcess.
>
> It's not clear from the docs (or your explanation) whether the lines
> above modify a global STARTUPINFO struct that gives default behaviour
> to subprocesses or if it is just the way to initialise one that can be
> passed to Popen or the convenience APIs. I guess the latter in which
> case it's probably better to be explicit and say:
>
> si = subprocess.STARTUPINFO()
> si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
> si.wShowWindow = subprocess.SW_HIDE
> subprocess.check_call(cmdargs, startupinfo=si)

When I said, "[s]et startupinfo=si, where si is defined", I assumed
familiarity with the Popen constructor:

    subprocess.Popen(
        args, bufsize=0, executable=None,
        stdin=None, stdout=None, stderr=None,
        preexec_fn=None, close_fds=False, shell=False,
        cwd=None, env=None, universal_newlines=False,
        startupinfo=None, creationflags=0)

    ...

    If given, startupinfo will be a STARTUPINFO object, which is
    passed to the underlying CreateProcess function. creationflags,
    if given, can be CREATE_NEW_CONSOLE or CREATE_NEW_PROCESS_GROUP.

http://docs.python.org/2/library/subprocess#popen-constructor


More information about the Tutor mailing list