Я использую python3
, и я хочу, чтобы моя программа использовала utf-8
для stdout
и stderr
без необходимости устанавливать переменную окружения PYTHONIOENCODING
в utf-8
вне программы python.
Другими словами, я хочу, чтобы выбор принудительного вывода utf-8
содержался в самой программе python, независимо от того, какой параметр PYTHONIOENCODING
или его отсутствие могли быть указаны в среде вызывающего.
Единственный специфический для Python3 способ сделать это, который я до сих пор выяснил, - это запустить программу следующим образом:
#!/usr/bin/python3.6
import os
import sys
if os.environ.get('PYTHONIOENCODING', '').lower() != 'utf-8':
os.environ['PYTHONIOENCODING'] = 'utf-8'
sys.exit(os.execl(
sys.executable,
os.path.basename(sys.executable),
*sys.argv
))
# Remainder of my program ...
В идеале, я хотел бы реализовать это безповторно выполнить интерпретатор python3, но я боюсь, что мне, вероятно, не повезло.
Есть предложения?Большое спасибо.
ADDENDUM:
Согласно комментариям в ответе ниже, я попробовал следующее, но ничего не печатается ...
#!/usr/bin/python3.6
open(sys.stdout.buffer.fileno(), 'w', encoding='utf8')
open(sys.stderr.buffer.fileno(), 'w', encoding='utf8')
print('Seems to be working')
sys.exit(0)
Я также попробовал utf-8
(с дефисом), и он тоже ничего не печатает.