Maximo 自动化脚本没有名为套接字的模块
Maximo automation script no module named socket
我正在开发一个自动化脚本,但我遇到了下一个错误:
ImportError:第 2 行没有名为 socket 的模块
我正在使用 jython 2.7、maximo 7.6。
有人知道解决方法吗?我知道并不是每个包都像在 python 中那样安装,而且套接字 pckg 似乎是未安装的包之一...
我建议使用 Java 库来做你想做的事。构建 Maximo 所需的所有 Java 库都在等待您的调用。如果您想将数据发送回 Maximo,这也将降低出现兼容性问题的风险。
通过在 Windows 服务器的命令提示符下以管理员身份执行以下命令,我能够查看 Maximo jython.jar(或任何 .jar 文件)的 Maximo 内容:
assoc .jar=CompressedFolder
有了它,我能够在以下位置的 Windows 服务器 Websphere 实现中找到并浏览 jython.jar 中的 Lib 文件夹:
C:\IBM\WebSphere\AppServer\profiles\ctgAppSrv01\installedApps\ctgCell01\MAXIMO.ear\lib\jython.jar\Lib
那里存在 socket.py 模块,因此应该可以在 Maximo 的 Jython 中使用它。它似乎是专门为 Jython 编写的版本,并在 .py 文件中引用了以下内容:
https://wiki.python.org/jython/NewSocketModule
在 vanilla Maximo 7.6.0 中,Jython 路径似乎不包括上面引用的 jython.jar 的 Lib 文件夹。您可以在此处找到有关如何在自动化脚本中以编程方式将其添加到路径的详细信息:
一旦完成,您应该能够导入套接字库并在您的脚本中使用它,例如:
from java.lang import System
import sys
# Required : Appending to sys.path to refer to python libraries
if sys.path.count('__pyclasspath__/Lib') == 1:
service.log('\nPath to /Lib already exists\n')
else :
service.log('\nExtend path to /Lib \n')
sys.path.append('__pyclasspath__/Lib')
import socket
try:
#create an AF_INET, STREAM socket (TCP)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
service.log('\nsocket created\n')
except socket.error, msg:
service.log('\nFailed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1] + '\n')
执行后,您应该会在日志中看到类似以下内容(前提是自动脚本日志记录功能正常):
07 Jun 2020 15:18:04:949 [DEBUG] putting System value <type 'java.lang.System'>
07 Jun 2020 15:18:04:949 [DEBUG] putting sys value <module 'sys' (built-in)>
07 Jun 2020 15:18:04:949 [DEBUG] getting sys
07 Jun 2020 15:18:04:949 [DEBUG] putting socket value <module 'socket' from '__pyclasspath__/Lib/socket.py'>
07 Jun 2020 15:18:04:949 [DEBUG] getting socket
07 Jun 2020 15:18:04:949 [DEBUG] getting socket
07 Jun 2020 15:18:04:949 [DEBUG] getting socket
07 Jun 2020 15:18:04:949 [DEBUG] putting s value <socket._socketobject object at 0x5>
07 Jun 2020 15:18:04:949 [DEBUG] execution completed for cached compiled script MXC_SOCKET for launch point MXC_SOCKET_LP
07 Jun 2020 15:18:04:949 [DEBUG] Path to /Lib already existssocket created
今天我 运行 遇到了同样的问题,但使用 Java 库而不是 Python 很快解决了它。这是我写的一个函数,returns 一个主机名的所有 IP 地址作为一个集合:
from java.net import InetAddress
def getIpAddress(hostName):
hostIpAddresses = set()
try:
service.log_debug("DNS querying the host name: " + hostName)
hosts = InetAddress.getAllByName(hostName)
for i in range(len(hosts)):
hostIpAddresses.add(str(hosts[i].getHostAddress()))
service.log_debug("Address found: " + str(hostIpAddresses))
return hostIpAddresses
except:
return "NOT FOUND"
我正在开发一个自动化脚本,但我遇到了下一个错误: ImportError:第 2 行没有名为 socket 的模块
我正在使用 jython 2.7、maximo 7.6。
有人知道解决方法吗?我知道并不是每个包都像在 python 中那样安装,而且套接字 pckg 似乎是未安装的包之一...
我建议使用 Java 库来做你想做的事。构建 Maximo 所需的所有 Java 库都在等待您的调用。如果您想将数据发送回 Maximo,这也将降低出现兼容性问题的风险。
通过在 Windows 服务器的命令提示符下以管理员身份执行以下命令,我能够查看 Maximo jython.jar(或任何 .jar 文件)的 Maximo 内容:
assoc .jar=CompressedFolder
有了它,我能够在以下位置的 Windows 服务器 Websphere 实现中找到并浏览 jython.jar 中的 Lib 文件夹:
C:\IBM\WebSphere\AppServer\profiles\ctgAppSrv01\installedApps\ctgCell01\MAXIMO.ear\lib\jython.jar\Lib
那里存在 socket.py 模块,因此应该可以在 Maximo 的 Jython 中使用它。它似乎是专门为 Jython 编写的版本,并在 .py 文件中引用了以下内容:
https://wiki.python.org/jython/NewSocketModule
在 vanilla Maximo 7.6.0 中,Jython 路径似乎不包括上面引用的 jython.jar 的 Lib 文件夹。您可以在此处找到有关如何在自动化脚本中以编程方式将其添加到路径的详细信息:
一旦完成,您应该能够导入套接字库并在您的脚本中使用它,例如:
from java.lang import System
import sys
# Required : Appending to sys.path to refer to python libraries
if sys.path.count('__pyclasspath__/Lib') == 1:
service.log('\nPath to /Lib already exists\n')
else :
service.log('\nExtend path to /Lib \n')
sys.path.append('__pyclasspath__/Lib')
import socket
try:
#create an AF_INET, STREAM socket (TCP)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
service.log('\nsocket created\n')
except socket.error, msg:
service.log('\nFailed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1] + '\n')
执行后,您应该会在日志中看到类似以下内容(前提是自动脚本日志记录功能正常):
07 Jun 2020 15:18:04:949 [DEBUG] putting System value <type 'java.lang.System'>
07 Jun 2020 15:18:04:949 [DEBUG] putting sys value <module 'sys' (built-in)>
07 Jun 2020 15:18:04:949 [DEBUG] getting sys
07 Jun 2020 15:18:04:949 [DEBUG] putting socket value <module 'socket' from '__pyclasspath__/Lib/socket.py'>
07 Jun 2020 15:18:04:949 [DEBUG] getting socket
07 Jun 2020 15:18:04:949 [DEBUG] getting socket
07 Jun 2020 15:18:04:949 [DEBUG] getting socket
07 Jun 2020 15:18:04:949 [DEBUG] putting s value <socket._socketobject object at 0x5>
07 Jun 2020 15:18:04:949 [DEBUG] execution completed for cached compiled script MXC_SOCKET for launch point MXC_SOCKET_LP
07 Jun 2020 15:18:04:949 [DEBUG] Path to /Lib already existssocket created
今天我 运行 遇到了同样的问题,但使用 Java 库而不是 Python 很快解决了它。这是我写的一个函数,returns 一个主机名的所有 IP 地址作为一个集合:
from java.net import InetAddress
def getIpAddress(hostName):
hostIpAddresses = set()
try:
service.log_debug("DNS querying the host name: " + hostName)
hosts = InetAddress.getAllByName(hostName)
for i in range(len(hosts)):
hostIpAddresses.add(str(hosts[i].getHostAddress()))
service.log_debug("Address found: " + str(hostIpAddresses))
return hostIpAddresses
except:
return "NOT FOUND"