Возьмите этот пример фрагмента.Каков правильный способ работы с подпроцессом unicode env в Windows?
import subprocess
import os
env = os.environ.copy()
env["FOO"] = u"foo"
subprocess.check_call(["ls", "-l"], env=env)
В Windows это не удается.
C:\Python27\python.exe test.py
Traceback (most recent call last):
File "test.py", line 7, in <module>
subprocess.check_call(["ls", "-l"], env=env)
File "C:\Python27\lib\subprocess.py", line 535, in check_call
retcode = call(*popenargs, **kwargs)
File "C:\Python27\lib\subprocess.py", line 522, in call
return Popen(*popenargs, **kwargs).wait()
File "C:\Python27\lib\subprocess.py", line 710, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 958, in _execute_child
startupinfo)
TypeError: environment can only contain strings
sys.path
является documented быть совершенно нормально с юникода. Каков правильный способ справиться с этим (и похожим кодом), чтобы все работало так, как ожидалось? Очевидным решением является вызов .encode()
по пути unicode, но я не уверен, что это приведет к неожиданному поведению.
Сообщение об ошибке кажется само собой разумеющимся; предположительно, Python просто не поддерживает создание дочернего процесса с переменными среды Unicode. –