[Python-checkins] r51758 - in python/trunk: Lib/subprocess.py Lib/test/test_subprocess.py Misc/NEWS

Neal Norwitz nnorwitz at gmail.com
Wed Sep 6 04:33:35 CEST 2006


This change seems to have broken the buildbots.

On 9/5/06, gustavo.niemeyer <python-checkins at python.org> wrote:
> Author: gustavo.niemeyer
> Date: Wed Sep  6 03:58:52 2006
> New Revision: 51758
>
> Modified:
>    python/trunk/Lib/subprocess.py
>    python/trunk/Lib/test/test_subprocess.py
>    python/trunk/Misc/NEWS
> Log:
> Fixing #1531862: Do not close standard file descriptors in the
> subprocess module.
>
>
> Modified: python/trunk/Lib/subprocess.py
> ==============================================================================
> --- python/trunk/Lib/subprocess.py      (original)
> +++ python/trunk/Lib/subprocess.py      Wed Sep  6 03:58:52 2006
> @@ -1000,14 +1000,10 @@
>                      if errwrite:
>                          os.dup2(errwrite, 2)
>
> -                    # Close pipe fds.  Make sure we doesn't close the same
> -                    # fd more than once.
> -                    if p2cread:
> -                        os.close(p2cread)
> -                    if c2pwrite and c2pwrite not in (p2cread,):
> -                        os.close(c2pwrite)
> -                    if errwrite and errwrite not in (p2cread, c2pwrite):
> -                        os.close(errwrite)
> +                    # Close pipe fds.  Make sure we don't close the same
> +                    # fd more than once, or standard fds.
> +                    for fd in set((p2cread, c2pwrite, errwrite))-set((0,1,2)):
> +                        if fd: os.close(fd)
>
>                      # Close all other fds, if asked for
>                      if close_fds:
>
> Modified: python/trunk/Lib/test/test_subprocess.py
> ==============================================================================
> --- python/trunk/Lib/test/test_subprocess.py    (original)
> +++ python/trunk/Lib/test/test_subprocess.py    Wed Sep  6 03:58:52 2006
> @@ -234,6 +234,48 @@
>          stripped = remove_stderr_debug_decorations(output)
>          self.assertEqual(stripped, "appleorange")
>
> +    def test_stdout_filedes_of_stdout(self):
> +        # stdout is set to sys.stdout.fileno() (#1531862).
> +        cmd = r"import sys, os; sys.exit(os.write(sys.stderr.fileno(), '.\n'))"
> +        rc = subprocess.call([sys.executable, "-c", cmd],
> +                             stdout=sys.stdout.fileno())
> +        self.assertEquals(rc, 2)
> +
> +    def test_stdout_fileobj_of_stdout(self):
> +        # stdout is set to sys.stdout (#1531862).
> +        cmd = r"import sys, os; sys.exit(os.write(sys.stderr.fileno(), '.\n'))"
> +        rc = subprocess.call([sys.executable, "-c", cmd],
> +                             stdout=sys.stdout)
> +        self.assertEquals(rc, 2)
> +
> +    def test_stdout_fileobj_of_stderr(self):
> +        # stdout is set to sys.stderr (#1531862).
> +        cmd = r"import sys, os; sys.exit(os.write(sys.stderr.fileno(), '.\n'))"
> +        rc = subprocess.call([sys.executable, "-c", cmd],
> +                             stdout=sys.stderr)
> +        self.assertEquals(rc, 2)
> +
> +    def test_stderr_filedes_of_stderr(self):
> +        # stderr is set to sys.stderr.fileno() (#1531862).
> +        cmd = r"import sys, os; sys.exit(os.write(sys.stderr.fileno(), '.\n'))"
> +        rc = subprocess.call([sys.executable, "-c", cmd],
> +                             stderr=sys.stderr.fileno())
> +        self.assertEquals(rc, 2)
> +
> +    def test_stderr_fileobj_of_stderr(self):
> +        # stderr is set to sys.stderr (#1531862).
> +        cmd = r"import sys, os; sys.exit(os.write(sys.stderr.fileno(), '.\n'))"
> +        rc = subprocess.call([sys.executable, "-c", cmd],
> +                             stderr=sys.stderr)
> +        self.assertEquals(rc, 2)
> +
> +    def test_stderr_fileobj_of_stdout(self):
> +        # stderr is set to sys.stdout (#1531862).
> +        cmd = r"import sys, os; sys.exit(os.write(sys.stderr.fileno(), '.\n'))"
> +        rc = subprocess.call([sys.executable, "-c", cmd],
> +                             stderr=sys.stdout)
> +        self.assertEquals(rc, 2)
> +
>      def test_cwd(self):
>          tmpdir = os.getenv("TEMP", "/tmp")
>          # We cannot use os.path.realpath to canonicalize the path,
>
> Modified: python/trunk/Misc/NEWS
> ==============================================================================
> --- python/trunk/Misc/NEWS      (original)
> +++ python/trunk/Misc/NEWS      Wed Sep  6 03:58:52 2006
> @@ -37,6 +37,8 @@
>  - Bug #1541863: uuid.uuid1 failed to generate unique identifiers
>    on systems with low clock resolution.
>
> +- Bug #1531862: Do not close standard file descriptors in subprocess.
> +
>
>  Extension Modules
>  -----------------
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins
>


More information about the Python-checkins mailing list