Попробуйте это:
find . -type f -print0 | tee /tmp/file-list | xargs -0 egrep whatever
/tmp/file-list (просматривают его с чем-то, что не возражает, аннулирует), содержат Ваш желаемый файл (файлы)? Если не, это - проблема находки. Если да, это - вопрос xargs.
Я имею намеренно не 2> 'd далеко ошибки. Они могут быть полезными.
Это происходит потому, что обычно, когда процесс STDOUT перенаправляется на что-то, кроме терминала, то вывод буферируется в буфер, специфичный ОС (возможно, 4K или 8K во многих случаях). И наоборот, при выводе на терминал STDOUT будет буферизирован или не буферизирован или не буферизован, поэтому вы увидите вывод после каждого \ N
или для каждого символа.
Вы обычно можете изменить буферизацию Stdout с помощью утилиты STBUF
:
stdbuf -oL python script.py > log
Теперь, если вы Log
, вы должны увидеть каждую вывод строки, как она сгенерирована.
Альтернативно явная промывка выходного потока после каждого печатания должна достичь одинакового. Похоже, это Sys.Stdout.flush ()
должен достичь этого в Python. Если вы используете Python 3.3 или новее, функция Print
также имеет ключевое слово Flush
, которое делает это: Печать («Hello», Flush = True)
.
Это должно сделать работу:
import time, sys
for i in range(10):
print('bla')
sys.stdout.flush()
time.sleep(5)
, поскольку Python будет буферизовать STDOUT
, здесь я использовал Sys.Stdout.flush ()
Чтобы промыть буфер.
Другое решение было бы использовать -U
(небуферированный) выключатель Python
. Итак, следующее тоже будет делать:
python -u script.py >> log
Вы должны передать flush=True
в функцию print
:
import time
for i in range(10):
print('bla', flush=True)
time.sleep(5)
Согласно документации, по умолчанию print
ничего не заставляет работать со смывом:
Вопрос о том, буферизован ли вывод обычно определяется файлом, но если Ключевой аргумент
flush
истинен, поток принудительно промывается.
А в документации к строкам sys
сказано:
В интерактивном режиме стандартные потоки буферизируются строками. В противном случае, они блочно-буферизированы, как обычные текстовые файлы. Вы можете переопределить это с помощью опции командной строки
-u
.
Если вы застряли с древней версией питона, вам необходимо вызвать метод flush
из sys. stdout
stream:
import sys
import time
for i in range(10):
print('bla')
sys.stdout.flush()
time.sleep(5)