Python вопрос относительно слушателя сервера - PullRequest
0 голосов
/ 20 августа 2009

Я написал плагин для команды jetcity ". Это всего лишь серверный прослушиватель, который прослушивает запускаемую сборку и выводит некоторые текстовые файлы с информацией о различных сборках, например, о том, что это вызвало, сколько изменений там, где и т. Д. После того, как я закончил, я написал скрипт на python, который мог бы вводить информация в teamcity во время работы сервера и запуск сборки. Я хотел бы иметь возможность получить артефакты для этой сборки после запуска сборки, но проблема в том, что я не знаю, сколько времени требуется для запуска каждой сборки. Иногда это 30 секунд, а иногда 30 минут.

Итак, я начинаю сборку с этой строки в python.

    urllib.urlopen('http://'+username+':'+password+'@localhost/httpAuth/action.html?add2Queue='+btid+'&system.name=<btid>&system.value=<'+btid+'>&system.name=<buildNumber>&system.value=<'+buildNumber+'>')

После запуска сборки (какое-то неопределенное время) я хотел бы использовать эту строку для получения моего текстового файла.

urllib.urlopen('http://'+username+':'+password+'@localhost/httpAuth/action.html?add2Queue='+btid+'&system.name=<btid>&system.value=<'+btid+'>&system.name=<buildNumber>&system.value=<'+buildNumber+'>')

Опять проблема в том, что я не знаю, как долго ждать перед выполнением второй строки. Обычно в Java я делаю второй поток, который спит определенное количество времени и ждет завершения сборки. Я не уверен, как это сделать в Python. Так что, если у кого-то есть идея, как сделать это в Python ИЛИ как лучше сделать это, я был бы признателен. Если мне нужно объяснить себя лучше, пожалуйста, дайте мне знать.

1011 * Грант-*

Ответы [ 2 ]

2 голосов
/ 20 августа 2009

Если вы не получите уведомление, связавшись с сервером сборки you , единственный способ сделать это - опрос. Вы можете создать поток, как указано в других комментариях, у вас просто спит и опрашивается ваш основной скрипт.

Что-то вроде:

wait=True
while wait:
   url=urllib.urlopen('http://'+username+':'+password+'@localhost/httpAuth/action.html?add2Queue='+btid+'&system.name=<btid>&system.value=<'+btid+'>&system.name=<buildNumber>&system.value=<'+buildNumber+'>')
   if url.getcode()!=404:
     wait=False
   else:
     time.sleep(60)

В качестве альтернативы вы можете использовать CherryPy . Затем, когда сборка будет завершена, вы можете подключить curl или wget к прослушивающему серверу CherryPy и запустить приложение для загрузки URL-адреса.

Вы также можете использовать xmlrpclib, чтобы сделать что-то подобное.

0 голосов
/ 20 августа 2009

Python на самом деле имеет систему потоков , которая довольно похожа на Java, поэтому вы сможете использовать ее без особых проблем.

Но если все, что вам нужно сделать, это подождать какое-то заданное количество времени, используйте

import time
time.sleep(300) # sleep for 300 seconds
...