Запуск пакетного файла Unicode в Windows 7, Python 2.x - PullRequest
0 голосов
/ 08 марта 2012

При запуске smack возникла проблема с subprocess.open () при запуске пакетного файла с символами Юникода в имени пути.Это barfs в 2.6 и 2.7, но прекрасно работает в 3.2.Неужели это просто ошибка, которая длилась до самого py3k ??

# -*- coding: utf-8 -*-

o = u"C:\\temp\\test.bat"        #"control" case
q = u"C:\\temp\\こんにちは.bat"

ho = open(o, 'r')
hq = open(q, 'r')               #so we can open q

ho.close()
hq.close()

import subprocess
subprocess.call(o)              #batch runs
subprocess.call(q)              #nothing from here on down runs
subprocess.call(q, shell=True)
subprocess.call(q.encode('utf8'), shell=True)   
subprocess.call(q.encode('mbcs'), shell=True)  #this was suggested elsewhere for older windows

1 Ответ

2 голосов
/ 08 марта 2012

Имена файлов передаются и возвращаются из API в виде строк (Unicode). Это может представлять специфичные для платформы проблемы, потому что на некоторых платформах имена файлов - это произвольные байтовые строки. (С другой стороны, на Windows имена файлов изначально хранятся как Unicode.) Как обходной путь, большинство API (например, open () и многие функции в модуле os), которые принимают имена файлов принимают байтовые объекты, а также строки, и некоторые API имеют способ запросить возвращаемое значение в байтах. Таким образом, os.listdir () возвращает список экземпляров байтов, если аргумент является экземпляром байтов, и os.getcwdb () возвращает текущий рабочий каталог в байтах пример. Обратите внимание, что когда os.listdir () возвращает список строк, имена файлов, которые не могут быть правильно декодированы, опущены, а не повышение UnicodeError.

Со страницы Что нового в версии 3.0 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...