Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move check_output() to shared function
Remove two duplicated check_output() functions. This also fixes a Python 2.6 error that when the subprocess exited with non-zero check_output() was calling CalledProcessError with an argument that doesn't exist in 2.6.
- Loading branch information
Showing
3 changed files
with
54 additions
and
79 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
'''Shared utility functions for any Python code to use. | ||
Unlike :py:func:`ckan.lib.helpers`, the functions in this module are not | ||
available to templates. | ||
''' | ||
import subprocess | ||
|
||
|
||
# We implement our own check_output() function because | ||
# subprocess.check_output() isn't in Python 2.6. | ||
# This code is copy-pasted from Python 2.7 and adapted to make it work with | ||
# Python 2.6. | ||
# http://hg.python.org/cpython/file/d37f963394aa/Lib/subprocess.py#l544 | ||
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 = subprocess.Popen(stdout=subprocess.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 subprocess.CalledProcessError(retcode, cmd) | ||
return output |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters