Сохранить вывод команды в файл и посмотреть его на терминале - PullRequest
0 голосов
/ 11 июня 2019

У меня есть команда, которая медленно выводит список.Я хочу, чтобы этот список был сохранен в файле, а также чтобы он медленно генерировался на терминале.

python script.py 2>&1 | tee File.txt

Это не работает для меня.Пока команда сохранена, я не вижу списка веб-сайтов, появляющихся на терминале.

Ответы [ 2 ]

1 голос
/ 11 июня 2019

По умолчанию stdout является буферизованной строкой при переходе к терминалу, но использует больший буфер при перенаправлении, следовательно, tee и терминал не увидят вывод позже.

Для способов получения скрипта.py, чтобы не буферизовать вывод, смотрите ответы на этот вопрос Отключите буферизацию вывода

Например, если script.py равен:

#!/usr/bin/python3
import time
for i in range(5):
    print('This is line', i, flush=True)
    time.sleep(1)

Running ./script.py | tee File.txt выведет на печатькаждая строка в терминале по мере выполнения строки - с интервалом в одну секунду.

Если вы удалите flush=True, тогда весь вывод буферизуется, и ничего не печатается, пока сценарий не завершится через 5 секунд, когда все будет напечатано.

2>&1 перенаправляет stderr на стандартный вывод, поэтому вам может потребоваться применить такую ​​же буферизацию как к стандартному, так и к стандартному выводу.

0 голосов
/ 11 июня 2019

Per Проект документации Linux (TLDP) ,

2> & 1 # Перенаправляет stderr в стандартный вывод.# Сообщения об ошибках отправляются в то же место, что и стандартный вывод.

И,

&> filename # Перенаправить как stdout, так и stderr в файл "filename."

Таким образом, чтобы передать оба файла,

Command &> | tee File.txt

Или просто stdout,

Command | tee File.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...