我怎么能追加到sys.使用Weblogic脚本工具



我需要在逻辑上和非交互式地从Oracle 10中取消部署应用程序。我想到的解决方案是使用WLST并编写一个python程序来为我完成这项工作。我遇到的问题是在脚本之外操纵sys.path

我使用Weblogic的自定义WLSTTask Ant任务调用我的脚本,并通过arguments属性将某些参数传递到脚本中。它看起来像这样:

<target name="undeploy-oldest">
    <wlsttask
      debug="true"
      fileName="${basedir}/resources/script/py/undeployOldestApp.py"
      arguments="dmi ${user} ${password} ${url} ${basedir}/resources/script/py/" />
</target>

和脚本本身。

import sys
from apputil.applist import getAppList
from apputil.apputility import getOldestAppVersion
from wlstModule import connect, disconnect, undeploy
appName = sys.argv[1]
username = sys.argv[2]
password = sys.argv[3]
url = sys.argv[4]
connect(username, password, url)
serverAppList = getAppList()
versionToUndeploy = getOldestAppVersion(appName, serverAppList)
if (versionToUndeploy != -1):
    undeploy(versionToUndeploy)
    print "Undeployed " + versionToUndeploy
else:
    print "Nothing to undeploy"
disconnect()

我遇到的问题与Ant任务参数列表中的最后一个参数有关。我的印象是Jython会自动将当前工作目录添加到sys.path;虽然我在sys.path中看到"。"的条目,但从自定义apputil模块导入的内容不起作用。我怀疑这与Ant实际运行的位置有关,并且"。"并不代表undeployOldestApp.py存在的目录。我尝试在WLSTTask标记内使用classpath标记将路径添加到Ant类路径,但它没有将该路径添加到Jython的sys.path列表中。

到目前为止,我唯一成功的是Ant任务中的最后一个参数,在import sysfrom apputil.applist import getAppList之间,我调用sys.path.append(sys.argv[5])。然后,我的脚本从导入中被正确引用,一切顺利。我的偏好是消除这种依赖,让Ant任务处理所需路径元素的注入。我没有运气完成这件事。

我希望我已经说清楚了,社区会有一些新颖的建议,或者至少解释为什么这似乎不起作用。谢谢。

也许您可以使用executeScriptBeforeFile="true"参数和

<script>
    sys.path.append(...)
</script>

或者,您可以尝试从java:

运行任务:
<java classname="weblogic.WLST" fork="true">
    <arg line="${basedir}/resources/script/py/undeployOldestApp.py dmi ${user} ${password} ${url} ${basedir}/resources/script/py/"/>
    <classpath refid="class.path"/>
</java>

这可能使您可以访问java任务的一些参数,这些参数在wlsttask任务中不可用。

相关内容

  • 没有找到相关文章

最新更新