唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

PythonでUnicodeのファイル名をコマンドラインで実行

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のファイル名では上手くいかず.