6

我试图找出一种方法让 weblogic WLST 终端在静默模式下运行。当我使用java weblogic.WLST命令启动终端时,它会打印以下行:

Initializing WebLogic Scripting Tool (WLST) ...

Welcome to WebLogic Server Administration Scripting Shell

Type help() for help on available commands

是否有命令行标志或一些未知的巫术使解释器不写这些行?我一厢情愿地尝试 -s 保持沉默,但无济于事。我所有的谷歌搜索都把我带到了一个 -i 标志,它做了一些完全不同的事情。

编辑:

为了澄清我的目的:

我需要解释器来运行 python 脚本,我确实需要它的输出。欢迎信息是无用的混乱,但是我想摆脱它。

仅限于:

我唯一的问题是解释器本身编写的第一行。一旦进入 python 脚本,我就可以毫无问题地处理发送到输出的内容。我唯一的问题是上面写的欢迎词。这些是由解释器本身编写的,而不是 python 代码。

4

4 回答 4

3

为了解决这个问题,我做了一些不同的事情。我grep -v在输出中放了一个 .. 像这样:

java weblogic.WLST script.py $ARGS | grep -v "正在初始化 WebLogic 脚本工具 (WLST) ..." | grep -v "欢迎使用 WebLogic Server 管理脚本外壳" | grep -v "键入 help() 获取可用命令的帮助" | grep -v "已成功连接到属于域 \"domain\" 的管理服务器 \"AdminServer\"。" | grep -v "警告:使用了不安全的协议连接到服务器。" | grep -v "为确保在线安全,应使用 SSL 端口或管理端口。" | grep -v "位置更改为 domainRuntime 树。这是一棵只读树" | grep -v "以 DomainMBean 作为根 MBean。" | grep -v "如需更多帮助,请使用 help('domainRuntime')" | grep -v"

于 2016-10-23T14:26:08.920 回答
2

我希望它只显示我在脚本中打印的行,所以我做的很简单 - 在我想在日志中看到的所有行(print('--> ...')在我的情况下)前面加上特殊的字符序列,然后像这样启动它:

wlst.sh changePassword.wlst.py "$@" | grep -- "-->"

样本输出:

Executing WLST script for domain SampleDomain
--> Executing credential change for SampleDomain
--> Changing DB password for DSTYPE1
--> Changing password for DataSource SampleDS1
--> Successfully changed DB credentials!
--> Changing password for DataSource SampleDS2
--> No JDBC resource with name SampleDS2 found, skipping...
--> Changing password for DataSource SampleDS3
--> No JDBC resource with name SampleDS3 found, skipping...
--> Changing password for DataSource SampleDS4
--> Successfully changed DB credentials!
Completed execution for domain SampleDomain
于 2017-03-13T09:58:35.277 回答
2

尝试这个:

就像你说的“这是一个黑客”,但这是一个相当优雅的黑客。

创建文件 runwlst.sh:

#!/bin/bash
. ${WLS_HOME}/server/bin/setWLSEnv.sh >/dev/null 2>&1
FILENAME=$1
shift
java weblogic.WLST ${FILENAME} "$@" | sed -e "1,7 d"

WLS_HOME 需要设置,或者使用绝对路径来设置WLSEnv.sh。

然后像这样将您的 WLST 脚本创建为“shell”脚本(我喜欢为我的脚本使用“.wlsh”扩展名):

#!/bin/bash /absolute_path_to_runwlst.sh/runwlst.sh
# your WLST Python code starts here
import ...

显然,runwlst.sh 中使用的 sed 脚本仅在“初始化”横幅长度为 7 行时才有效,这可能会随着新版本或 WLS 补丁而改变。

此解决方案的好处是现在您可以从命令行运行 WLST 脚本,如下所示:

$ createManagedServer.wlsh domain servername 

或者使用 WLST 脚本是其他 shell scipts,如下所示:

#!/bin/bash
PORT=`./getPortForManagedServer.wlsh domain server`
echo ${PORT}

你明白了

于 2016-02-18T22:38:15.597 回答
0

有点远,但您也可以通过将 stdout 和 stderr 捕获到不同的流中来使整个 JVM 输出静音,然后将从 weblogic mbean 捕获的值打印到控制台流。在编写了一个 ansible 模块后,我不得不做类似的事情,该模块要求我将纯 JSON 返回到标准输出,而没有任何消息横幅或其他内容打印到终端。

根据您的需要,一个可能的解决方案是编写一个 Python 脚本,该脚本首先更改 OutputStreams,如本例所示,然后启动一个WSLT 会话。只需记住保留控制台输出流的“副本”并使用它们将结果写入。

于 2017-01-26T12:55:17.607 回答