subprocess.Popen с помощью пути unicode

У меня есть имя файла в unicode, которое я хотел бы открыть. Следующий код:

cmd = u'cmd /c "C:\\Pok\xe9mon.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 Solutions collect form web for “subprocess.Popen с помощью пути unicode”

Похоже, вы используете Windows и Python 2.X. Используйте файл 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 хотел, чтобы команды оболочки были закодированы как 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. Вы можете сначала установить pip, а затем вы можете установить Django, запустив командную оболочку с правами администратора и выполните следующую команду:

 pip install Django 

Это установит Django в каталоге сайтов-пакетов установки Python.

 >>> subprocess.call(['start', u'avión.mp3'.encode('latin1')], shell=True) 0 

Нет необходимости вызывать cmd если вы используете параметр shell . Правильный способ запуска соответствующей программы – использовать встроенный AFAIK.

Мой 2c, HIH.

Я думаю, что окна используют 16-битные символы, не уверен, что это UCS2 или UTF16 или что-то в этом роде. Поэтому я предполагаю, что это может иметь проблему с UTF8.

  • Сильно запутано win32api + COM и ответ от SO
  • Открыть проводник в файле
  • Открытие дескриптора устройства на Python в Windows
  • Каков наилучший способ сделать грамотное программирование на Python в Windows?
  • Как проверить, является ли ОС Vista в Python?
  • python вызывает внешние программы без открытия консоли (dos prompt)
  • Можно ли использовать sys.platform == 'win32' для проверки на 64-битном Python?
  • Имена файлов Unicode в Windows с Python & subprocess.Popen ()
  • Python - лучший язык программирования в мире.