python-3.x - 没有名为套接字的模块

标签 python-3.x python-2.7 secure-crt

我正在尝试在 SecureCRT 的登录脚本中使用套接字模块。从我的命令行运行时,脚本运行完美,但一旦我尝试通过 SecureCRT 运行它,它告诉我没有套接字模块。 我使用 python 3.7 并确保套接字在我的库中。我的库也映射到路径。

这是我正在运行的脚本:

import socket
import datetime
timeIn=(datetime.datetime.now().strftime('%d %B %Y %H:%M:%S'))
hostname = socket.gethostname()
hostip = socket.gethostbyname(hostname)
t=open("secCRT.txt", "w")
t.write('testing script \n')
t.write(timeIn)
t.write(' host: '+  hostname)
t.write(' ip: '+ hostip)
t.close()

当从我的命令行运行时,它工作得很好,但当在 crt 中运行时,它指出没有名为 socket 的模块(没有名为 _socket 的模块)。 我看到有与此类似的帖子,但还没有一个能够帮助我。

编辑#1

这里是python映射到path系统变量的方式:

enter image description here

编辑#2

尝试将版本 3.7 的 _socket.py 和 socket.py 移动到与脚本相同的目录,但仍然出现错误。 编辑*还有socket.cpython-37.pyc

编辑#3

我想知道,因为这是一个登录脚本(在与服务器建立连接时运行),它会不会在我连接的服务器而不是本地机器上寻找套接字模块?脚本本身在本地机器上。

编辑 #4:从命令行而不是登录脚本

>>> import sys
>>> import pprint
>>> pprint.pprint(sys.path)
['',
 'C:\\Program Files\\Python\\Python37\\python37.zip',
 'C:\\Program Files\\Python\\Python37\\DLLs',
 'C:\\Program Files\\Python\\Python37\\lib',
 'C:\\Program Files\\Python\\Python37',
 'C:\\Program Files\\Python\\Python37\\lib\\site-packages']

编辑#5

我能够在 SecureCRT 应用程序中以脚本的形式执行此操作

with open("secCRT.txt", "w") as sout:
    sout.write(pprint.pformat(vars(pprint)))

有几行引用了这个文件:

C:\Program Files\VanDyke Software\Clients\vpython27.zip

这让我相信他们使用的是 verison 2.7。当我在 vpython27.zip 中搜索“socket”时,socket.pycSocketServer.pyc 是唯一出现的项目。 这是否意味着我想要找到 socket.py 或任何其他版本 2.7 的依赖项并将它们移到那里?

编辑 #6:开发人员 (VanDyke) 的解释

"  - The _socket module is built out by default as a .pyd
    file on Windows. This is effectively a .dll that can be
    loaded by the Python interpreter. Unfortunately, .pyd's
    can *not* be loaded out of the Python distribution zip
    file we ship."

编辑 #7:这是 VanDyke 建议我获取我正在寻找的数据的方式

objTab=crt.GetScriptTab()
objConfig=objTab.Session.Config
strHostname=objConfig.GetOption('Hostname')
strSessName=objTab.Session.Path

此解决方案非常适合我的环境。

最佳答案

可行的解决方案

VanDyke 建议我使用以下代码获取主机名和 session 名称,并将 python 用作登录脚本。

objTab=crt.GetScriptTab()
objConfig=objTab.Session.Config
strHostname=objConfig.GetOption('Hostname')
strSessName=objTab.Session.Path

关于python-3.x - 没有名为套接字的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55345291/

相关文章:

python-3.x - python-rq 工作人员是否支持多处理模块?

python - 我们不能将一个以 0(零)开头的值赋给变量吗?示例 : a=0123. 这会引发错误 "invalid token"

iOS:URLRequest错误域= NSURLErrorDomain代码= -1202“该服务器的证书无效

python-3.x - 尽管使用刷新 token ,Google Ads API 仍显示 "Token has been expired or revoked"

python-3.x - Cloud Natural Language API 返回 socket.gaierror : nodename nor servname provided after performing Sentiment Analysis every now and then

python-2.7 - 在 QTableWidget 中使用 setCellWidget 对列进行排序

Python共享读内存

python - Django 自定义管理器 get_queryset() 不工作

exception-handling - 如何识别 STATUS_INVALID_CRUNTIME_PARAMETER 异常