考虑这个例子:
>>> import subprocess as sp
>>> sp.Popen("notepad2.exe",env={"PATH":"C:\\users\\guillermo\\smallapps\\bin"})
<subprocess.Popen object at 0x030DF430>
>>> sp.Popen("notepad2.exe",env={"PATH":u"C:\\users\\guillermo\\smallapps\\bin"})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python26\lib\subprocess.py", line 633, in __init__
errread, errwrite)
File "C:\Python26\lib\subprocess.py", line 842, in _execute_child
startupinfo)
TypeError: environment can only contain strings
Run Code Online (Sandbox Code Playgroud)
我已经将错误追溯到这个CPython代码:
http://hg.python.org/cpython/file/ca54c27a9045/Modules/_winapi.c#l511
不过,我无法做出什么改进PyUnicode_Check:
http://hg.python.org/cpython/file/26af48f65ef3/Objects/unicodeobject.c#l73
use*_*342 13
如错误消息所示,环境必须只包含字符串.您的第一个Popen调用满足此条件,但第二个调用不满足,因为您映射PATH到使用u"..."语法创建的Unicode对象.在提供环境字符串时仅使用字节字符串Popen,您将不会收到此错误.
请注意,通过回溯判断,您使用的是Python 2.6,因此链接代码实际上并不适用,因为它来自Python 3.3.0 beta2.PyUnicode_Check检查该对象是一个unicode对象,这是有意义的在Python 3,其中的字符串是 Unicode对象(内部为实现).但是,在Python 2.6中,等效行正在使用PyString_Check,这将使您在第二个示例中失败.
| 归档时间: |
|
| 查看次数: |
4125 次 |
| 最近记录: |