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
>>> 'C:\Pokיmon.mp3' is not recognized as an internal or external command, operable program or batch file.
even though the file do exist. Why is this happening?
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)
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With