Как распечатать разные результаты на экране и в файле на Python?

Я заметил, что инструмент httpie python дает разные результаты в следующих двух случаях:

  1. $ http google.com
  2. $ http google.com > out.txt

В файле out.txt отсутствуют заголовки, которые присутствуют в первом случае.


person egor7    schedule 17.12.2013    source источник
comment
Я немного не понимаю, в чем именно заключается ошибка.   -  person William Denman    schedule 17.12.2013


Ответы (2)


На странице руководства http вы можете найти следующее

Output options:
 --print WHAT, -p WHAT

   String specifying what the output should contain:

   'H' request headers 'B' request body 'h' response headers 'b' response body

   The default behaviour is 'hb' (i.e., the response headers  and  body  is 
   printed), if standard  output  is  not redirected. If the output is piped
   to another program or to a file, then only the response body is printed by
   default.

Это означает, что http намеренно ведет себя иначе при перенаправлении вывода. Чтобы получить такое же поведение, как и для неперенаправленного вывода, вы можете использовать

`http --print hb google.com > out.txt`

(Но также обратите внимание, что симпатичная печать по-разному ведет себя с перенаправлением.)

person chris    schedule 17.12.2013
comment
Ой, видя, что этот ответ был принят, я полагаю, что мой ответ был совершенно неверным. Я думал, что вопрос в том, как распечатать разные результаты на экране и в файле при написании программы Python. : -] - person Frerich Raabe; 17.12.2013

Используйте sys.stdout.isatty, чтобы определить, является ли stdout терминалом («tty») или файлом, и распечатать разные выходные данные в зависимости от этого, например:

import sys
if sys.stdout.isatty():
    print "Hello terminal!"
else:
    print "Hello non-terminal!"
person Frerich Raabe    schedule 17.12.2013