mirror of
https://github.com/httpie/cli.git
synced 2024-11-24 08:22:22 +02:00
Ignore redirected stdout with --output, -o
This makes it easier to use HTTPie in cron jobs and scripts. Closes #259
This commit is contained in:
parent
4f8d6c013b
commit
01ca7f0eb2
@ -5,6 +5,7 @@ Change Log
|
||||
This document records all notable changes to `HTTPie <http://httpie.org>`_.
|
||||
This project adheres to `Semantic Versioning <http://semver.org/>`_.
|
||||
|
||||
|
||||
`1.0.0-dev`_ (Unreleased)
|
||||
-------------------------
|
||||
|
||||
@ -15,6 +16,8 @@ This project adheres to `Semantic Versioning <http://semver.org/>`_.
|
||||
* Added ``-F`` as short name for ``--follow``
|
||||
* Added JSON detection when ``--json, -j`` is used in order to correctly format
|
||||
JSON responses even when an incorrect ``Content-Type`` is returned.
|
||||
* Redirected ``stdout`` doesn't trigger an error anymore when ``--output FILE``
|
||||
is set.
|
||||
* Changed the default color style back to ``solarized`` as it supports
|
||||
both the light and dark terminal background mode
|
||||
* Fixed ``--session`` when used with ``--download``
|
||||
@ -22,7 +25,7 @@ This project adheres to `Semantic Versioning <http://semver.org/>`_.
|
||||
|
||||
|
||||
`0.9.3`_ (2016-01-01)
|
||||
-------------------------
|
||||
---------------------
|
||||
|
||||
* Changed the default color ``--style`` from ``solarized`` to ``monokai``
|
||||
* Added basic Bash autocomplete support (need to be installed manually)
|
||||
|
2
Makefile
2
Makefile
@ -11,7 +11,7 @@ END=" \#\#\# \033[0m\n"
|
||||
all: test
|
||||
|
||||
|
||||
init:
|
||||
init: uninstall-httpie
|
||||
@echo $(TAG)Installing dev requirements$(END)
|
||||
pip install --upgrade -r $(REQUIREMENTS)
|
||||
|
||||
|
@ -310,8 +310,9 @@ output_options.add_argument(
|
||||
dest='output_file',
|
||||
metavar='FILE',
|
||||
help="""
|
||||
Save output to FILE. If --download is set, then only the response body is
|
||||
saved to the file. Other parts of the HTTP exchange are printed to stderr.
|
||||
Save output to FILE instead of stdout. If --download is also set, then only
|
||||
the response body is saved to FILE. Other parts of the HTTP exchange are
|
||||
printed to stderr.
|
||||
|
||||
"""
|
||||
|
||||
|
@ -204,4 +204,8 @@ def main(args=sys.argv[1:], env=Environment(), error=None):
|
||||
if downloader and not downloader.finished:
|
||||
downloader.failed()
|
||||
|
||||
if (not isinstance(args, list) and args.output_file and
|
||||
args.output_file_specified):
|
||||
args.output_file.close()
|
||||
|
||||
return exit_status
|
||||
|
@ -171,12 +171,10 @@ class HTTPieArgumentParser(ArgumentParser):
|
||||
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.')
|
||||
|
||||
self.args.output_file_specified = bool(self.args.output_file)
|
||||
if self.args.download:
|
||||
# FIXME: Come up with a cleaner solution.
|
||||
if not self.env.stdout_isatty:
|
||||
if not self.args.output_file and not self.env.stdout_isatty:
|
||||
# Use stdout as the download output file.
|
||||
self.args.output_file = self.env.stdout
|
||||
# With `--download`, we write everything that would normally go to
|
||||
|
@ -1,10 +1,30 @@
|
||||
import os
|
||||
from tempfile import gettempdir
|
||||
|
||||
import pytest
|
||||
|
||||
from utils import TestEnvironment, http, HTTP_OK, COLOR, CRLF
|
||||
from httpie import ExitStatus
|
||||
from httpie.compat import urlopen
|
||||
from httpie.output.formatters.colors import get_lexer
|
||||
|
||||
|
||||
@pytest.mark.parametrize('stdout_isatty', [(True,), (False,)])
|
||||
def test_output_option(httpbin, stdout_isatty):
|
||||
output_filename = os.path.join(gettempdir(), test_output_option.__name__)
|
||||
url = httpbin + '/robots.txt'
|
||||
|
||||
r = http('--output', output_filename, url,
|
||||
env=TestEnvironment(stdout_isatty=stdout_isatty))
|
||||
assert r == ''
|
||||
|
||||
expected_body = urlopen(url).read().decode()
|
||||
with open(output_filename, 'r') as f:
|
||||
actual_body = f.read()
|
||||
|
||||
assert actual_body == expected_body
|
||||
|
||||
|
||||
class TestVerboseFlag:
|
||||
def test_verbose(self, httpbin):
|
||||
r = http('--verbose',
|
||||
|
@ -22,7 +22,9 @@ class TestFakeWindows:
|
||||
def test_output_file_pretty_not_allowed_on_windows(self, httpbin):
|
||||
env = TestEnvironment(is_windows=True)
|
||||
output_file = os.path.join(
|
||||
tempfile.gettempdir(), '__httpie_test_output__')
|
||||
tempfile.gettempdir(),
|
||||
self.test_output_file_pretty_not_allowed_on_windows.__name__
|
||||
)
|
||||
r = http('--output', output_file,
|
||||
'--pretty=all', 'GET', httpbin.url + '/get',
|
||||
env=env, error_exit_ok=True)
|
||||
|
Loading…
Reference in New Issue
Block a user