Unicodeがファイル名に含まれているファイル名が外部のコマンドの引数として実行する場合に,うまくいかない問題があったので色々と試してみた.
[python]GetShortPathNameWでショートファイルネームを取得する(上手くいった方法)
Win32 APIを利用することでUnicodeを含まないショートファイルネームを取得して処理を行う.
import ctypes short = ctypes.create_unicode_buffer(256) ctypes.windll.kernel32.GetShortPathNameW(u"ファイル名", ctypes.byref(short), ctypes.sizeof(short)) print short.value
pywin32を使う
pywin32を使うことで,Unicode文字列を指定しても実行出来ることを期待.
ドキュメントに反して(?)なぜかUnicodeのファイル名では上手くいかず.
win32process.CreateProcess
import win32process win32process.CreateProcess(None, u"notepad.exe", None, None, 0, 0,None, None, win32process.STARTUPINFO())
win32api.GetShortPathName
ショートファイルネームの取得.
同様になぜかUnicodeのファイル名では上手くいかず.