您的位置:首页 > 编程语言 > Python开发

Read Unicode characters from command-line arguments in Python 2.x on Windows

2013-12-13 21:07 579 查看
Ref:

[1] http://stackoverflow.com/questions/846850/read-unicode-characters-from-command-line-arguments-in-python-2-x-on-windows/846931#846931

[2] http://code.activestate.com/recipes/572200/

Reading unicode character from command-line arguments in python 2.x is kinda shit... I tried my code for weeks and now I found one feasible solution via stackoverflow:

def win32_utf8_argv():
"""Uses shell32.GetCommandLineArgvW to get sys.argv as a list of UTF-8
strings.

Versions 2.5 and older of Python don't support Unicode in sys.argv on
Windows, with the underlying Windows API instead replacing multi-byte
characters with '?'.

Returns None on failure.

Example usage:

>>> def main(argv=None):
...    if argv is None:
...        argv = win32_utf8_argv() or sys.argv
...
"""

try:
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 if present
if argc.value - len(sys.argv) == 1:
start = 1
else:
start = 0
return [argv[i].encode('utf-8') for i in
xrange(start, argc.value)]
except Exception:
pass


Usage:

=> run the code before getting argument value from the command-line.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐