如何导入包含Sikuli中包含的几个模块的Python脚本

时间:2013-03-26 15:51:15

标签: python sikuli

我正在尝试从Sikuli(r930)调用Python(2.7)脚本并使用脚本中的变量。以下是Python代码:

import sys
import re
import os
import time
from pywinauto import application
from SendKeys import SendKeys
from cStringIO import StringIO


app=application.Application()
app.connect_(path=r'C:\Program Files\myApp\myApp.exe')

backup = sys.stdout

sys.stdout = StringIO()     

app.dlg.print_control_identifiers()

out = sys.stdout.getvalue() 

sys.stdout.close()  # close the stream 
sys.stdout = backup # restore original stdout

regex = re.compile(r'(\d{8}\s*\-\s*\d{8})')
found = re.search(regex, out)

print found.group(0) #pass this variable to Sikuli

我正在捕获stdout,因为这是Pywinauto's print_control_identifiers方法返回的内容(不是字符串)。此外,我需要一个GUI应用程序的散列序列号,我无法使用Sikuli,因此需要使用Pywinauto。但是,当我尝试从Sikuli调用execfile()时,我收到错误:

ImportError: no module named Pywinauto. 

我阅读了文档,我知道Sikuli(Jython)可以包含Python模块和脚本。此外,我正在调用的外部.py文件在独立运行时成功运行。有人可以告诉我,如果我错过了一步吗?

代码我用来从Sikuli调用上面显示的.py文件:

aScript = 'c:\\getHash_serial.py'
execfile(aScript)

1 个答案:

答案 0 :(得分:1)

你遇到的直接问题是Jython无法找到你的模块。可能是您在Python下安装它,并且它们不共享模块路径。您可以通过设置JYTHONPATH环境变量来解决此问题。

然而,Pywinauto链接本机代码,这是Jython不支持的。

您可以通过subprocess module从Jython调用常规Python来解决此限制。