【问题标题】:How can I append to sys.path using Weblogic Scripting Tools?如何使用 Weblogic 脚本工具附加到 sys.path?
【发布时间】:2011-05-04 16:57:28
【问题描述】:

我需要以非交互方式从 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 标记内使用类路径标记添加 Ant 类路径的路径,但它没有将该路径添加到 Jython 的 sys.path 列表中。

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

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

【问题讨论】:

  • 我不是要回答您的确切问题,而是建议您使您的脚本更加健壮。您的脚本可以从任何地方调用,而不必从它所在的目录调用。因此,在脚本中动态确定模块位置并添加 sys.path 始终是一个好习惯。例如,如果您的模块位置与脚本位置相同(在您的情况下是。),那么您只需要确定脚本位置并附加到 sys.path 这样您也可以避免参数 5。我知道这是一个旧帖子,只是分享我的想法:)

标签: oracle ant weblogic jython wlst


【解决方案1】:

也许你可以使用 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 上不可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 2019-05-04
    相关资源
    最近更新 更多