Почему 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
- Python обнаруживает USB-накопитель, а затем назначает букву диска?
- Получить название окна другой программы, используя имя процесса
- вкладка обновления хрома окна x 0 (или текущая вкладка) через командную строку
- os.path.exists не распознает подкаталог под драйверами C: \ Windows \ system32 \
- Использование ресурсов в окнах
Как говорится в сообщении об ошибке, среда должна содержать только строки. Ваш первый вызов 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
, что приведет к ее отказу во втором примере.
- Как остановить закрытие Python сразу после выполнения в Microsoft Windows
- Откройте программу с минимизацией или скрытием python
- Python в Windows – как ждать нескольких дочерних процессов?
- Вызов java-кода из python на окнах 8
- Установить атрибут «скрыть» на папки в ОС Windows?
- Создание автономных приложений python
- Как получить разрешение монитора в Pygame?
- Python2.4 и 2.6 ведут себя по-разному для os.path.getmtime () в Windows
- Есть ли способ проверить, загружен ли модуль стандартным модулем многопроцессорности в Windows?