Skip to content

No python 2.6 subprocess.check_output #9

@frimik

Description

@frimik

setuptools-git-version fails on python 2.6... I pulled in the 2.7 version of check_output into my setup.py like this:

from setuptools import setup, find_packages
import subprocess

if "check_output" not in dir(subprocess):  # duck punch check_output
    from subprocess import Popen, PIPE, CalledProcessError
    STDOUT = subprocess.STDOUT

    def check_output(*popenargs, **kwargs):
        r"""Run command with arguments and return its output as a byte string.

        If the exit code was non-zero it raises a CalledProcessError.  The
        CalledProcessError object will have the return code in the returncode
        attribute and output in the output attribute.

        The arguments are the same as for the Popen constructor.  Example:

        >>> check_output(["ls", "-l", "/dev/null"])
        'crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n'

        The stdout argument is not allowed as it is used internally.
        To capture standard error in the result, use stderr=STDOUT.

        >>> check_output(["/bin/sh", "-c",
        ...               "ls -l non_existent_file ; exit 0"],
        ...              stderr=STDOUT)
        'ls: non_existent_file: No such file or directory\n'
        """
        if 'stdout' in kwargs:
            raise ValueError(
                'stdout argument not allowed, it will be overridden.')
        process = Popen(stdout=PIPE, *popenargs, **kwargs)
        output, unused_err = process.communicate()
        retcode = process.poll()
        if retcode:
            cmd = kwargs.get("args")
            if cmd is None:
                cmd = popenargs[0]

            raise CalledProcessError(retcode, cmd, output=output)
        return output

    subprocess.check_output = check_output

Now my builds are happy:

  py26: commands succeeded
  py27: commands succeeded
  py36: commands succeeded
  congratulations :)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions