以此示例代碼片段爲例。在Windows中處理unicode subprocess env的正確方法是什麼?
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是使用Unicode完全確定。處理這個(和類似的代碼)的正確方法是什麼,以便一切按預期工作?顯而易見的解決方案是在unicode路徑上調用.encode()
,但我不確定這是否會導致意外行爲。
錯誤消息似乎不言自明;據推測,Python根本不支持使用Unicode環境變量創建子進程。 – 2015-04-03 08:55:26