[New-bugs-announce] [issue45237] Python subprocess not honoring append mode for stdout on Windows

wolfgang kuehn report at bugs.python.org
Fri Sep 17 17:11:43 EDT 2021

New submission from wolfgang kuehn <wolfgang-kuehn at decatur.de>:

On Windows, if you pass an existing file object in append mode to a subprocess, the subprocess does **not** really append to the file:

1. A file object with `Hello World` content is passed to the subprocess
2. The content is erased
3. The subprocess writes to the file
4. The expected output does not contain `Hello World`


    import subprocess, time, pathlib, sys
    print(f'Caller {sys.platform=} {sys.version=}')

    pathlib.Path('sub.py').write_text("""import sys, time
    print(f'Callee {sys.stdout.buffer.mode=}')""")
    file = pathlib.Path('dummy.txt')
    file.write_text('Hello World')
    popen = subprocess.Popen([sys.executable, 'sub.py'], stdout=file.open(mode='a'))

Expected output on Linux

    Caller sys.platform='linux' sys.version='3.8.6'
    Callee sys.stdout.buffer.mode='wb'

Unexpected bad output on Windows

    Caller sys.platform='win32' sys.version='3.8.6'
    NULNULNULNULNULNULNULNULNULNULNULCallee sys.stdout.buffer.mode='wb'

Note that the expected output is given on Windows if the file is opened in the subprocess via `sys.stdout = open('dummy.txt', 'a')`. So it is definitely a subprocess thing.

components: IO
messages: 402096
nosy: wolfgang-kuehn
priority: normal
severity: normal
status: open
title: Python subprocess not honoring append mode for stdout on Windows
type: behavior
versions: Python 3.8

Python tracker <report at bugs.python.org>

More information about the New-bugs-announce mailing list