0

我为 jetbrains 工具 teamcity 编写了一个插件。它几乎只是一个服务器侦听器,用于侦听正在触发的构建并输出一些文本文件,其中包含有关不同构建的信息,例如触发它的原因、那里有多少更改等等。完成后我编写了一个可以输入的 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 中执行此操作或更好的方法来执行此操作,我将不胜感激。如果我需要更好地解释自己,请告诉我。

授予-

4

2 回答 2

2

除非您通过让构建服务器与您联系而得到通知,否则唯一的方法就是轮询。您可以按照其他评论中的说明生成一个线程,您只需让主脚本休眠并进行轮询。

就像是:

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 来做类似的事情。

于 2009-08-20T17:47:37.297 回答
0

Python 实际上有一个与 Java 非常相似的线程系统,所以你应该可以毫不费力地使用它。

但是,如果您需要做的只是等待一段预定的时间,请使用

import time
time.sleep(300) # sleep for 300 seconds
于 2009-08-20T17:06:40.360 回答