подпроцесс.Popen с путем unicode
у меня есть имя файла unicode, которое я хотел бы открыть. Следующий код:
cmd = u'cmd /c "C:Pokxe9mon.mp3"'
cmd = cmd.encode('utf-8')
subprocess.Popen(cmd)
возвращает
>>> 'C:Pokיmon.mp3' is not recognized as an internal or external command, operable program or batch file.
даже если файл не существует. Почему это происходит?
4 ответов
похоже, вы используете Windows и Python 2.Используйте Х. os.startfile:
>>> import os
>>> os.startfile(u'Pokémon.mp3')
не интуитивно, получение командной оболочки, чтобы сделать то же самое:
>>> import subprocess
>>> import locale
>>> subprocess.Popen(u'Pokémon.mp3'.encode(locale.getpreferredencoding()),shell=True)
в моей системе командная оболочка (cmd.exe) кодировка cp437
, но для программ Windows это cp1252
. Popen
wanted команды оболочки закодированы как cp1252
. Это похоже на ошибку, и она также кажется исправленной в Python 3.X:
>>> import subprocess
>>> subprocess.Popen('Pokémon.mp3',shell=True)
ваша проблема может быть решена с помощью smart_str функция модуля Django.
используйте этот код:
from django.utils.encoding import smart_str, smart_unicode
cmd = u'cmd /c "C:\Pok\xe9mon.mp3"'
smart_cmd = smart_str(cmd)
subprocess.Popen(smart_cmd)
Вы можете найти информацию о том, как установить Django на Windows здесь. Вы можете сначала установить Пип и затем вы можете установить Django, запустив командную строку с правами администратора и выполните следующую команду:
pip install Django
это установит Django на сайт-пакеты вашей установки Python справочник.
>>> subprocess.call(['start', u'avión.mp3'.encode('latin1')], shell=True)
0
нет необходимости звонить cmd
Если вы используете
Я думаю, что windows использует 16-битные символы, не уверен, что это UCS2 или UTF16 или что-то в этом роде. Поэтому я думаю, что у него может быть проблема с UTF8.