Skip to content Skip to sidebar Skip to footer

Subprocess.popen With A Unicode Path

I have a unicode filename that I would like to open. The following code: cmd = u'cmd /c 'C:\\Pok\xe9mon.mp3'' cmd = cmd.encode('utf-8') subprocess.Popen(cmd) returns >>>

Solution 1:

It looks like you're using Windows and Python 2.X. Use os.startfile:

>>>import os>>>os.startfile(u'Pokémon.mp3')

Non-intuitively, getting the command shell to do the same thing is:

>>>import subprocess>>>import locale>>>subprocess.Popen(u'Pokémon.mp3'.encode(locale.getpreferredencoding()),shell=True)

On my system, the command shell (cmd.exe) encoding is cp437, but for Windows programs is cp1252. Popen wanted shell commands encoded as cp1252. This seems like a bug, and it also seems fixed in Python 3.X:

>>>import subprocess>>>subprocess.Popen('Pokémon.mp3',shell=True)

Solution 2:

Your problem can be solved through smart_str function of Django module.

Use this code:

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)

You can find information on how to install Django on Windows here. You can first install pip and then you can install Django by starting a command shell with administrator privileges and run this command:

pip install Django

This will install Django in your Python installation's site-packages directory.

Solution 3:

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

There's no need to call cmd if you use the shell parameter The correct way to launch an associated program is to use the cmd's start built-in AFAIK.

My 2c, HIH.

Solution 4:

I think windows uses 16-bit characters, not sure if it's UCS2 or UTF16 or something like that. So I guess that it could have an issue with UTF8.

Post a Comment for "Subprocess.popen With A Unicode Path"