This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
win32_unicode_argv.py | |
Importing this will replace sys.argv with a full Unicode form. | |
Windows only. | |
From this site, with adaptations: | |
http://code.activestate.com/recipes/572200/ | |
Usage: simply import this module into a script. sys.argv is changed to | |
be a list of Unicode strings. | |
""" | |
import sys | |
def win32_unicode_argv(): | |
"""Uses shell32.GetCommandLineArgvW to get sys.argv as a list of Unicode | |
strings. | |
Versions 2.x of Python don't support Unicode in sys.argv on | |
Windows, with the underlying Windows API instead replacing multi-byte | |
characters with '?'. | |
""" | |
from ctypes import POINTER, byref, cdll, c_int, windll | |
from ctypes.wintypes import LPCWSTR, LPWSTR | |
GetCommandLineW = cdll.kernel32.GetCommandLineW | |
GetCommandLineW.argtypes = [] | |
GetCommandLineW.restype = LPCWSTR | |
CommandLineToArgvW = windll.shell32.CommandLineToArgvW | |
CommandLineToArgvW.argtypes = [LPCWSTR, POINTER(c_int)] | |
CommandLineToArgvW.restype = POINTER(LPWSTR) | |
cmd = GetCommandLineW() | |
argc = c_int(0) | |
argv = CommandLineToArgvW(cmd, byref(argc)) | |
if argc.value > 0: | |
# Remove Python executable and commands if present | |
start = argc.value - len(sys.argv) | |
return [argv[i] for i in | |
xrange(start, argc.value)] | |
sys.argv = win32_unicode_argv() |
Import
import sysReference:
import win32_unicode_argv
http://code.activestate.com/recipes/572200/
http://stackoverflow.com/a/846931
No comments :
Post a Comment