Любая программа может обнаружить, подключен ли к ней терминал STDOUT и / или STDERR: man isatty (3) .Python также имеет такую функциональность: sys.stdout.isatty ().
Возможно, ваш скрипт Python или его подсистема журналирования печатает строки, которые отсутствуют во втором запуске, только при работе на терминале, т.е. в интерактивном режиме.Это обычная и правильная практика.Например, нет смысла печатать "Quit the server with CONTROL-C"
, если выходные данные перенаправлены в файл журнала.
Ниже приведен простой пример:
#!/usr/bin/python
import sys
print "Print always."
if sys.stdout.isatty():
print "Print only on tty!"
Вот и мы:
$ ./test.py
Print always.
Print only on tty!
$ ./test.py > log
$ cat log
Print always.
$