Added support for output redirection with --download (#104).

This commit is contained in:
Jakub Roztocil 2013-04-12 11:04:14 -03:00
parent 464b7a36da
commit 341272db1e
2 changed files with 16 additions and 2 deletions

View File

@ -149,6 +149,7 @@ class Download(object):
:type progress_file: file :type progress_file: file
""" """
assert output_file, output_file
self._output_file = output_file self._output_file = output_file
self._resume = resume self._resume = resume
self._resumed_from = 0 self._resumed_from = 0
@ -208,8 +209,11 @@ class Download(object):
else: else:
self._resumed_from = 0 self._resumed_from = 0
self._output_file.seek(0) try:
self._output_file.truncate() self._output_file.seek(0)
self._output_file.truncate()
except IOError:
pass # stdout
else: else:
# TODO: Should the filename be taken from response.history[0].url? # TODO: Should the filename be taken from response.history[0].url?
# Output file not specified. Pick a name that doesn't exist yet. # Output file not specified. Pick a name that doesn't exist yet.

View File

@ -140,13 +140,23 @@ class Parser(ArgumentParser):
Modify `env.stdout` and `env.stdout_isatty` based on args, if needed. Modify `env.stdout` and `env.stdout_isatty` based on args, if needed.
""" """
if not self.env.stdout_isatty and self.args.output_file:
self.error('Cannot use --output, -o with redirected output.')
# FIXME: Come up with a cleaner solution.
if self.args.download: if self.args.download:
if not self.env.stdout_isatty:
# Use stdout as tge download output file.
self.args.output_file = self.env.stdout
# With `--download`, we write everything that would normally go to # With `--download`, we write everything that would normally go to
# `stdout` to `stderr` instead. Let's replace the stream so that # `stdout` to `stderr` instead. Let's replace the stream so that
# we don't have to use many `if`s throughout the codebase. # we don't have to use many `if`s throughout the codebase.
# The response body will be treated separately. # The response body will be treated separately.
self.env.stdout = self.env.stderr self.env.stdout = self.env.stderr
self.env.stdout_isatty = self.env.stderr_isatty self.env.stdout_isatty = self.env.stderr_isatty
elif self.args.output_file: elif self.args.output_file:
# When not `--download`ing, then `--output` simply replaces # When not `--download`ing, then `--output` simply replaces
# `stdout`. The file is opened for appending, which isn't what # `stdout`. The file is opened for appending, which isn't what