在XP vs 7上导入pywinauto

时间:2013-12-18 22:58:21

标签: python windows virtual-machine pywinauto

我无法在XP上导入pywinauto

我有一台运行Windows 7的计算机和一台运行XP的VM。这两个版本都有几乎相同的Python版本。

以下是每个环境中Python27文件夹之间差异的图片:http://i.stack.imgur.com/ao4R7.png

这似乎是无关紧要的差异,特别是涉及到相关包装时。

如果我在XP VM上尝试import pywinauto,我会得到以下结果:

>>> import pywinauto.controls
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\pywinauto\__init__.py", line 28, in <module>
    import findwindows
  File "C:\Python27\lib\site-packages\pywinauto\findwindows.py", line 37, in <module>
    import controls
  File "C:\Python27\lib\site-packages\pywinauto\controls\__init__.py", line 33,in <module>
    import win32_controls
  File "C:\Python27\lib\site-packages\pywinauto\controls\win32_controls.py", line 31, in <module>
    from pywinauto import win32functions
ImportError: cannot import name win32functions
>>>

我没有尝试重新安装pywinautopywin32。在我尝试之前,我只是想知道在XP和7之间pywinauto是否有任何问题?或者在本机窗口和VM之间?

1 个答案:

答案 0 :(得分:0)

好吧,我想我已经明白了,虽然我不知道为什么。我的问题是我的原始问题的根本原因是我得到了

sre_constants.error nothing to repeat

当我尝试在XP虚拟环境中编译我的程序时。原因在于C:\Python27\Lib\site-packages\pywinauto\tests\asianhotkey.py第110行。

_asianHotkeyRE = re.compile (r"""
    \(&.\)      # the hotkey
    (
        (\t.*)|     # tab, and then anything
        #(\\t.*)|   # escaped tab, and then anything
        (\(.*\)     # anything in brackets
    )|
    \s*|            # any whitespace
    :|              # colon
    (\.\.\.)|       # elipsis
    >|              # greater than sign
    <|              # less than sign
    (\n.*)          # newline, and then anything
    \s)*$""", re.VERBOSE)

我甚至无法在虚拟XP环境中以自己的脚本运行它。如果我删除其中任何一行中的*

,它就会运行
\s*|            # any whitespace

\s)*$""", re.VERBOSE)

我不知道为什么会这样,只是实验结果。

无论如何,据我所知,变量_asianHotkeyRE仅在整个包中使用一次;在同一档案的第(133)行:

found = _asianHotkeyRE.search(text)

所以我将这两组代码改为

pattern = r"""
    \(&.\)      # the hotkey
    (
        (\t.*)|     # tab, and then anything
        #(\\t.*)|   # escaped tab, and then anything
        (\(.*\)     # anything in brackets
    )|
    \s*|            # any whitespace
    :|              # colon
    (\.\.\.)|       # elipsis
    >|              # greater than sign
    <|              # less than sign
    (\n.*)          # newline, and then anything
    \s)*$"""

 found = re.search(pattern,text)

使用正则表达式编译的东西不喜欢这种模式的格式。也许在该虚拟机上安装的re版本不是最新的或什么?

这么长的故事简短,它是固定的。我不知道为什么,如果有人可以尝试使用他们自己的任何虚拟环境重现问题,我会喜欢它。