New submission from Frost Ming <miangh...@gmail.com>:
The following snippet behaves differently between Windows and POSIX. import subprocess import time p = subprocess.Popen("ls -l", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print(p.stdout.read(1)) # read 1 byte print(p.communicate()) # Returns empty output It works fine on Windows and Python 2.x(communicate() returning the remaining output). So from the best guess it should be the expected behavior. The reason behind this is that Popen.stdout is a BufferedReader. It stores all output in the buffer when calling read(). However, communicate() and the lower API _communicate() use a lower level method os.read() to get the output, which does not respect the underlying buffer. When an empty output is retrieved the file object is closed then. First time to submit a bug report and pardon me if I am getting anything wrong. ---------- components: 2to3 (2.x to 3.x conversion tool), IO, Library (Lib) messages: 374366 nosy: Frost Ming, brett.cannon, vstinner priority: normal severity: normal status: open title: BufferedReader causes Popen.communicate losing the remaining output. versions: Python 3.10, Python 3.7, Python 3.8, Python 3.9 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue41406> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com