Почему я получаю сообщение об ошибке Unicode при передаче вывода, содержащего Unicode, из Python 2 в grep?

Изменение перенаправления двумя способами должно решить эту проблему. 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и имеет лишь минутную точность на уровне -, добавление необходимо для предотвращения возможной перезаписи файла журнала. В качестве альтернативы выходные данные также могут быть доставлены в другие файлы журналов.

-1
26.01.2021, 15:02
1 ответ

Программы нередко определяют, подключен ли их стандартный вывод к терминалу или к чему-то еще. Функция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.

1
18.03.2021, 22:34

Теги

Похожие вопросы