New submission from wolfgang kuehn <wolfgang-ku...@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` Demo: import subprocess, time, pathlib, sys print(f'Caller {sys.platform=} {sys.version=}') pathlib.Path('sub.py').write_text("""import sys, time time.sleep(1) 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')) file.write_text('') time.sleep(2) print(file.read_text()) 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 <rep...@bugs.python.org> <https://bugs.python.org/issue45237> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com