Изменение перенаправления двумя способами должно решить эту проблему. 1 )Перенаправить потоки вывода и ошибок для каждой команды. 2 )Измените оператор перенаправления так, чтобы он добавлял файл журнала, а не перезаписывал его.
Последняя команда должна выглядеть так:
pg_dump -a -t table-country -p 5432 -U usr db-maint2 2>&1 | tee >(psql -p 5432 -U postgres db-project &>> "initDB_$(date +%Y%m%d_%H%M).log") >(psql -p 5432 -U postgres db-gp-projet &>> "initDB_$(date +%Y%m%d_%H%M).log") &>> "initDB_$(date +%Y%m%d_%H%M).log"
Вывод команды pg_dump
доставляется команде tee
, которая указана в этой форме:
tee file1 file2 &>> logfile
В данном случае аргументы файл1 и файл2 просто являются процессами. tee
запишет вывод предыдущей команды в файл1, файл2, а затем в стандартный вывод. Стандартный вывод перехватывается и перенаправляется в файл журнала (в режиме добавления ).
Вывод, записанный в файл1, доставляется команде psql
, которая устанавливает собственное перенаправление для стандартного вывода и ошибок. То же самое происходит и со второй командой psql
.
Так как имя файла журнала получается с помощью команды date
и имеет лишь минутную точность на уровне -, добавление необходимо для предотвращения возможной перезаписи файла журнала. В качестве альтернативы выходные данные также могут быть доставлены в другие файлы журналов.
Программы нередко определяют, подключен ли их стандартный вывод к терминалу или к чему-то еще. Функцияisatty()
является частью posix и используется довольно часто.
Очень распространенный пример: вы получаете существенно разные выходные данные между двумя следующими командами:
ls
ls | cat
В случае с python2 похоже, что он меняется с кодировкой по умолчанию, которую использует python:https://stackoverflow.com/questions/2276200/changing-default-encoding-of-python/7892892#7892892
Это явно сознательное дизайнерское решение, но неясно, в чем его преимущество.
В указанном ответе рекомендуется установить:PYTHONIOENCODING
Python2 обесценивается . Вы все равно должны попытаться переключиться на python 3.
Это не дает ответа на вопрос, чем они отличаются, но простой поиск в Google показывает, почему это не работает.Этот ответ о переполнении стека указывает на самый первый пример в этой документации:
https://docs.python.org/2/library/functions.html#unichr
Короткая версия заключается в том, что вы не конвертируете строку Unicode в байты перед добавлением ее в строку aski.