Как я могу добавить в sys.path, используя Инструменты Weblogic Scripting? - PullRequest
2 голосов
/ 04 мая 2011

Мне нужно логически и неинтерактивно удалить приложение из Oracle 10. Решение, которое я придумал, состоит в том, чтобы использовать WLST и написать программу на python, чтобы выполнить эту работу за меня. Проблема в том, что я манипулирую sys.path вне скрипта.

Я вызываю свой сценарий с помощью пользовательской WLSTTask Ant-задачи Weblogic и передаю определенные аргументы в сценарий через атрибут 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. Я попытался добавить путь к пути классов Ant с помощью тега classpath внутри тега WLSTTask, но он не добавил этот путь в список sys.path Jython.

Мой единственный успех до сих пор был в последнем аргументе в задаче Ant, где между import sys и from apputil.applist import getAppList я называю sys.path.append(sys.argv[5]). На мои скрипты тогда правильно ссылаются из импорта, и все хорошо. Я бы предпочел, чтобы я исключил эту зависимость и чтобы задача Ant выполняла внедрение нужного элемента пути. Мне не повезло выполнить это.

Я надеюсь, что я все понял, и что у сообщества будут какие-то новые предложения или, по крайней мере, объяснения, почему это не работает. Спасибо.

1 Ответ

0 голосов
/ 26 сентября 2011

Возможно, вы могли бы использовать параметр 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.

...