我需要以逻辑和非交互方式取消部署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 sys
和from apputil.applist import getAppList
之间,我称之为sys.path.append(sys.argv[5])
。然后从导入中正确引用我的脚本,一切都很好。我的偏好是我消除了这种依赖性,并且Ant任务将处理所需路径元素的注入。我没有幸运完成这件事。
我希望我已经清楚了,社区会提出一些新颖的建议,或至少解释为什么这似乎不起作用。感谢。
答案 0 :(得分:0)
也许您可以使用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>
这可以让您访问wlsttask上没有的java任务的一些参数。