将变量从 Jython (wsadmin) 传递到 shell 脚本

Pass a variable from Jython (wsadmin) to shell script

我正在尝试使用 wsadmin.sh 调用的 Jython 脚本将从 WebSphere 检索到的值传递给调用者 shell 脚本中的变量。

调用者 shell 脚本 (getValue.sh) 将具有:

#!/bin/sh

/opt/ibm/WebSphere/AppServerV70/bin/wsadmin.sh -lang jython -conntype SOAP -f /home/user/Jython.py

exit 0

Jython 脚本 (Jython.py) 将具有:

cellName = AdminControl.getCell()
return cellName

如何将 cellName 的值存储到我的 shell 脚本中的变量中,例如 CELL_NAME,我可以像这样使用它:

echo "Cell Name is: " ${CELL_NAME}

这个版本的 Jython 脚本比我实际使用的版本简单很多,但我认为概念是一样的。

如果我在 Jython 脚本中使用了很多函数,有没有办法将其中一个值传递给我的 shell 脚本?即

def getValue1():
     value1 = "1"
     return value1

def getValue2():
     value2 = "2"
     return value2

def getValue3():
     value3 = "3"
     return value3

print getValue1()
print getValue2()
print getValue3()

我有办法将多个值存储到不同的 shell 脚本变量中吗?即

echo "Value #1: " ${VALUE_ONE}
echo "Value #2: " ${VALUE_TWO}
echo "Value #3: " ${VALUE_THREE}

... 这样我就可以 运行 一个 Jython 脚本来检索多个值并在我的 shell 脚本中使用这些多个值进行进一步处理。

感谢您提供的任何帮助。

我会尽量使用你的代码。我认为您会发现最有效的方法是使用 Jython 的 print 命令。如果您的获取变量脚本如下所示

#!/bin/sh

/opt/ibm/WebSphere/AppServerV70/bin/wsadmin.sh -lang jython -conntype SOAP -f /home/user/Jython.py

exit 0

然后在 Jython.py 文件的某处,您需要打印。它可能看起来像这样。

def getValue1():
 value1 = "1"
 return value1

def getValue2():
 value2 = "2"
 return value2

def getValue3():
 value3 = "3"
 return value3

print getValue1()
print getValue2()
print getValue3()

输出将是

1
2
3

如果您需要基于此执行命令,您可以考虑将结果通过管道传输到 xargs。假设上面你可以改为执行这个

#!/bin/sh

/opt/ibm/WebSphere/AppServerV70/bin/wsadmin.sh -lang jython -conntype SOAP -f /home/user/Jython.py | xargs -i echo "hello world" > file{}.txt

exit 0

这会将 "hello world" 写入 file1.txt、file2.txt 和 file3.txt

如果您只想保存结果,请尝试

#!/bin/sh

result=`/opt/ibm/WebSphere/AppServerV70/bin/wsadmin.sh -lang jython -conntype SOAP -f /home/user/Jython.py`

exit 0

在您的命令周围加上刻度线 (`)(在波浪号 ~ 上方)。

我的记忆有点模糊,您可能需要 wsadmin 的安静标志才能使它们工作。希望对您有所帮助。

编码愉快!如果您还有其他问题,请发表评论。

谢谢马特。你让我走上正轨。通过在命令中添加“| tail -1”,我能够完成所需的操作。您可能已经知道 wsadmin SOAP 连接如何始终吐出以下行:

WASX7209I: Connected to process "dmgr" on node labCellManager01 using SOAP connector;  The type of process is: DeploymentManager

...所以我必须找到一种方法只将屏幕输出的最后一部分分配给我的变量,因此使用 "tail -1".

命令变为:

result=`/opt/ibm/WebSphere/AppServerV70/bin/wsadmin.sh -lang jython -conntype SOAP -f /home/user/Jython.py | tail -1`

使用它时,您必须注意在 Jython 脚本中在屏幕上打印的内容,因为只有最后一次打印才会分配给该变量。您可以使用 tail 命令调整您需要的内容。

感谢您的帮助