我正在使用 ctypes 实现使用登录创建进程 http://msdn.microsoft.com/en-us/library/ms682429.aspx,一切正常,除了我不知道如何处理这一部分:
指向新进程的环境块的指针。如果该参数为NULL,则新进程使用调用进程的环境。
环境块由空终止字符串的空终止块组成。每个字符串的形式如下:
名称=值\0
为了生成原始字符串,我执行以下命令:
lpEnvironment = '\0'.join(['%s=%s' % (k, os.environ[k]) for k in os.environ]) + '\0\0'
print lpEnvironment
'XAUTHORITY=/home/username/.Xauthority\x00MUTT_DIR=/home/username/.mutt\x00LASTDIRFILE=/home/username/.lastpwd-geany\x00LOGNAME=username\...\x00\x00'
然而,运行我从中创建一个 ctypes 变量,它会截断信息:
ctypes.c_wchar_p(lpEnvironment)
c_wchar_p(u'XAUTHORITY=/home/username/.Xauthority')
如何正确传递lpEnvironment信息?
据我所知,整个字符串确实通过了ctypes
边界在一个方向上正确,但在返回时被截断。
>>> ctypes.create_string_buffer('abc\0def').value
'abc'
>>> ctypes.create_string_buffer('abc\0def').raw
'abc\x00def'
不幸的是(至少对我来说,Linux 上的 Python 2.6.5)结果是create_unicode_buffer
没有.raw
财产。然而,
>>> ctypes.wstring_at(ctypes.create_unicode_buffer(u'abc\0def), 7)
u'abc\x00def'
按预期工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)