【问题标题】:Maximo automation script no module named socketMaximo 自动化脚本没有名为 socket 的模块
【发布时间】:2020-05-22 09:34:57
【问题描述】:

我正在开发一个自动化脚本,但出现下一个错误: ImportError: No module named socket in at line number 2

我正在使用 jython 2.7,maximo 7.6。

有人知道解决方法吗?我知道并非每个包都像在 python 中那样安装,而且似乎套接字 pckg 是未安装的包之一......

【问题讨论】:

    标签: automation jython maximo jython-2.7


    【解决方案1】:

    通过在 Windows 服务器的命令提示符下以管理员身份执行以下命令,我能够查看 Maximo jython.jar(或任何 .jar 文件)的 Maximo 内容:

    assoc .jar=压缩文件夹

    这样,我就能够在以下位置的 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 文件夹。您可以在此处找到有关如何在自动化脚本中以编程方式将其添加到路径的详细信息:

    https://expertinmaximo.wordpress.com/2016/08/26/import-python-libraries-to-use-in-automation-scripts/

    完成后,您应该能够导入套接字库并在脚本中使用它,例如:

    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
    

    【讨论】:

    【解决方案2】:

    我建议使用 Java 库来做你想做的事。构建 Maximo 所需的所有 Java 库都在等待您的调用。如果您想将数据发送回 Maximo,这也将降低出现兼容性问题的风险。

    【讨论】:

      【解决方案3】:

      今天我遇到了同样的问题,但使用 Java 库而不是 Python 很快就解决了。这是我编写的一个函数,它将主机名的所有 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"
      

      【讨论】:

        猜你喜欢
        • 2015-06-10
        • 2018-03-07
        • 2018-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-20
        • 1970-01-01
        相关资源
        最近更新 更多