Как я могу импортировать скрипт Python с несколькими модулями, включенными в Sikuli

Я пытаюсь вызвать скрипт Python (2.7) из Sikuli (r930) и использовать переменную из скрипта. Ниже приведен код 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 print_control_identifiers (а не строка). Кроме того, мне нужен хешированный серийный номер из приложения с графическим интерфейсом, который я не могу получить с помощью Sikuli, поэтому необходимо использовать Pywinauto. Однако, когда я пытаюсь позвонить execfile() из Sikuli, я получаю сообщение об ошибке:

ImportError: no module named Pywinauto. 

Я прочитал документацию и знаю, что Sikuli (Jython) может включать модули и скрипты Python. Кроме того, внешний файл .py, который я вызываю, успешно работает при независимом запуске. Может ли кто-нибудь сказать мне, если я пропустил шаг?

Код, который я использую для вызова файла .py, показанного выше, из Sikuli:

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

person suffa    schedule 26.03.2013    source источник
comment
Привет, Суффа, прочитайте о той же проблеме с модулем PIL - stackoverflow.com/questions/13488117/   -  person SWAPYAutomation    schedule 27.03.2013


Ответы (1)


Непосредственная проблема, с которой вы столкнулись, заключается в том, что Jython не может найти ваш модуль. Возможно, вы установили его под Python, и у них нет общего пути к модулю. Это можно исправить, задав переменную среды JYTHONPATH.

Однако Pywinauto связывается с нативным кодом, а это то, что Jython не поддерживает.

Вы можете обойти это ограничение, вызвав обычный Python из Jython через модуль подпроцесса.

person Nathaniel Waisbrot    schedule 29.03.2013