New submission from Alexey Izbyshev <>:

When redirecting, subprocess attempts to achieve the following state: each fd 
to be redirected to is less than or equal to the fd it is redirected from, 
which is necessary because redirection occurs in the ascending order of 
destination descriptors. It fails to do so if a low fd (< 2) is redirected to 
stderr and another low fd is closed, which may lead to an incorrect 
redirection, for example:

$ cat
import os
import subprocess
import sys

os.close(0)[sys.executable, '-c',
                 'import sys; print("Hello", file=sys.stderr)'],

$ python3 2>/dev/null
$ python3 >/dev/null

Expected behavior:
$ python3 >/dev/null
$ python3 2>/dev/null

components: Extension Modules, Library (Lib)
messages: 312181
nosy: gregory.p.smith, izbyshev
priority: normal
severity: normal
status: open
title: subprocess may incorrectly redirect a low fd to stderr if another low fd 
is closed
type: behavior
versions: Python 3.6, Python 3.7

Python tracker <>
Python-bugs-list mailing list

Reply via email to