Мне нужно запустить графический интерфейс из существующего приложения Python. Графический интерфейс на самом деле является отдельным графическим интерфейсом Python, который может работать отдельно. Прямо сейчас я запускаю графический интерфейс, используя что-то вроде:

           res=Popen(['c:\python26\pythonw.exe',
                   full_filename,
                   str(RESULTs),
                   str(context)], stdout=PIPE).communicate()[0]

Где full_filename — это полный путь к графическому интерфейсу Python. Как видите, проблема в том, что мне нужно передать переменную RESULTS в GUI через командную строку. Это работает нормально до тех пор, пока командная строка не станет слишком длинной, и мне придется запаковать переменные в отдельный файл, а затем повторно загрузить их при запуске графического интерфейса. Это работает, но медленно.

Таким образом, я хочу каким-то образом запустить графический интерфейс из моего сценария Python, передать рассматриваемые переменные в графический интерфейс для его обработки, а затем зафиксировать результаты графического интерфейса обратно в вызывающем сценарии. Как вы можете видеть выше, в настоящее время это происходит через переменную res, поскольку графический интерфейс можно настроить для записи своего вывода в стандартный вывод, который фиксируется в этой переменной.

Любые идеи? Я надеюсь, что кто-то может предложить более элегантный способ сделать это. Все это происходит на машине с WinXP.

0
reckoner 29 Дек 2009 в 02:47
Я перепометил это, надеюсь, это улучшенный набор. На самом деле речь идет не о многопоточности или многопроцессорности (последнее указывает на использование определенного модуля Python stdlib), даже если приложение с графическим интерфейсом является многопоточным или запускается как отдельный процесс.
 – 
Peter Hansen
29 Дек 2009 в 03:51
Ну, основная проблема заключается в передаче данных из одного процесса Python (вызывающий) в другой процесс Python (запускающий графический интерфейс). В настоящее время это делается, как описано выше (через аргументы командной строки или травление). Я не уверен, как это охарактеризовать, но основная проблема заключается в передаче данных ч/б этих двух процессов, а не столько в управлении графическим интерфейсом.
 – 
reckoner
29 Дек 2009 в 07:06

2 ответа

Судя по всему, если превосходное предложение Назария для первого шага не является неосуществимым, такая программа, как pyWinAuto, делай что тебе нужно. Мы используем его для управления нашим собственным приложением на основе wxPython для использования в автоматизированном тестировании, при этом скрипт Python управляет программой, вводя текст в поля графического интерфейса, нажимая кнопки и т. д. Общий термин для этого — «автоматизация графического интерфейса», и вы можете найти много другой информации об этом, выполнив поиск. pyWinAuto — это единственный вариант, доступный в мире Python для этого, но он довольно хороший.

1
Peter Hansen 29 Дек 2009 в 03:50

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

0
torger 29 Дек 2009 в 03:03