diff options
author | Simon Law <simon.law@ecometrica.com> | 2012-07-20 14:41:30 -0400 |
---|---|---|
committer | Simon Law <simon.law@ecometrica.com> | 2012-07-20 14:41:30 -0400 |
commit | eae470eaaa1d3c95f8e58c5296ed28a01bcd74aa (patch) | |
tree | d5807412e33c624ea58479887f48b27fd54b5eca /wkhtmltopdf/subprocess.py | |
parent | df83b5a8045d1fe69b3ae4d5ffdc5f98069862dc (diff) | |
download | django-wkhtmltopdf-eae470eaaa1d3c95f8e58c5296ed28a01bcd74aa.tar.gz django-wkhtmltopdf-eae470eaaa1d3c95f8e58c5296ed28a01bcd74aa.tar.bz2 django-wkhtmltopdf-eae470eaaa1d3c95f8e58c5296ed28a01bcd74aa.zip |
wkhtmltopdf() uses subprocess.check_output() instead of a custom Popen call.
Diffstat (limited to 'wkhtmltopdf/subprocess.py')
-rw-r--r-- | wkhtmltopdf/subprocess.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/wkhtmltopdf/subprocess.py b/wkhtmltopdf/subprocess.py new file mode 100644 index 0000000..d0abacd --- /dev/null +++ b/wkhtmltopdf/subprocess.py @@ -0,0 +1,44 @@ +from __future__ import absolute_import + +from subprocess import * + + +# Provide Python 2.7's check_output() function. +try: + check_output +except NameError: + 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] + error = CalledProcessError(retcode, cmd) + # Add the output attribute to CalledProcessError, which + # doesn't exist until Python 2.7. + error.output = output + raise error + return output |