Это сводит меня с ума.У меня есть основной драйвер / программа Python 3 (3.5.2), который я использую и использую подпроцесс для вызова дополнительных процессов Python 3, с которыми я общаюсь с помощью rpyc.Это работает хорошо, особенно в python 2.
Я успешно перешел на python 3 и проверил, что все эти процессы успешно запускаются при запуске из терминала.
Чтобы запустить их из моего драйвера, это выглядит следующим образом.
cmd_one = "/path/to/.virtualenv/venv_one/bin/python file_a.py"
cmd_two = "/path/to/.virtualenv/venv_two/bin/python file_b.py"
s_one = subprocess.Popen(cmd_one.split(), stdout=logfile, stderr=logfile)
s_two = subprocess.Popen(cmd_two.split(), stdtou=logfile, stderr=logfile)
Это прекрасно работает в Python 2.7.
Однако, когда я обновляюсь до Python 3, яя вижу что-то странное с кодировкой по умолчанию, которую я не могу понять.Для cmd_one это прекрасно работает - если я сделаю
import locale
print(locale.getpreferredencoding())
, он вернет UTF-8
, как я и ожидал.Тем не менее, для cmd_two я получаю ANSI_X3.4-1968
, по-видимому, без причины, и это приводит к большому количеству ошибок Unicodedecode в результате.Как я уже сказал, при вызове в терминале и cmd_one, и cmd_two работают отлично и используют правильную кодировку по умолчанию.
Я много раз искал, но это, кажется, особый случай.Я не хочу использовать кодировку по умолчанию, потому что чувствую, что это маскирует какую-то другую проблему.Есть ли что-то в file_b.py
и его составляющих, которое каким-то образом устанавливает кодировку в ANSII, когда она не видит, что она работает в терминале?file_b.py
является частью большого проекта Tensorflow, и на него опирается около 8 файлов, но я просмотрел все из них, но ничего не могу найти.
Это на ubuntu 16.04
иPython 3 по умолчанию - 3.5.2, и, насколько я знаю, нет способа передать encoding='utf-8'
с Popen.
Любые предложения о том, что, черт возьми, происходит?
Спасибо.