Почему Popen терпит неудачу в Windows, если параметр «env» содержит объект unicode?

Рассмотрим этот пример:

>>> 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 

Я проследил ошибку в этом коде 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

One Solution collect form web for “Почему Popen терпит неудачу в Windows, если параметр «env» содержит объект unicode?”

Как говорится в сообщении об ошибке, среда должна содержать только строки. Ваш первый вызов Popen удовлетворяет этому условию, а второй – не потому, что вы сопоставляете PATH с объектом Unicode, созданным с помощью синтаксиса u"..." Используйте только байтовые строки при предоставлении среды dicts для Popen и вы не получите эту ошибку.

Обратите внимание, что, судя по трассировке, вы используете Python 2.6, поэтому связанный код на самом деле не применяется, потому что он исходит из Python 3.3.0 beta2 . PyUnicode_Check проверяет, что объект является объектом unicode, что имеет смысл в Python 3, где строки (внутренние реализованы как) объекты unicode. Однако в Python 2.6 эквивалентная строка использует PyString_Check , что приведет к ее отказу во втором примере.

  • Установить атрибут «скрыть» на папки в ОС Windows?
  • Как запустить несколько других скриптов python вместе и отправить их аргументы?
  • установить rpy2 на Windows7 64bit для Python 2.7
  • Как я могу создавать файлы в Windows со встроенными косой чертой, используя Python?
  • python: почему os.makedirs вызывают WindowsError?
  • python win32 имя файла длина обходной путь
  • Создание сценариев Python выполняется в Windows без указания расширения «.py»
  • Почему программа Python 2.7 AMD 64, похоже, запускает Python в 32-битном режиме?
  • Python - лучший язык программирования в мире.