没有名为套接字的模块
No Module Named Socket
我正在尝试在 SecureCRT 的登录脚本中使用套接字模块。当从我的命令行 运行 时,脚本 运行 是完美的,但是一旦我尝试通过 SecureCRT 运行 它告诉我没有套接字模块。
我使用 python 3.7 并确保套接字在我的库中。我的库也被映射为路径。
这是脚本我 运行ning:
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 的模块)。
我看到有类似的帖子,但 none 已经能够帮助我了。
编辑 #1
这里是python映射到path系统变量的方式:
编辑 #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.pyc
和 SocketServer.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 建议我使用以下代码获取主机名和会话名称,并将 python 用作登录脚本。
objTab=crt.GetScriptTab()
objConfig=objTab.Session.Config
strHostname=objConfig.GetOption('Hostname')
strSessName=objTab.Session.Path
我正在尝试在 SecureCRT 的登录脚本中使用套接字模块。当从我的命令行 运行 时,脚本 运行 是完美的,但是一旦我尝试通过 SecureCRT 运行 它告诉我没有套接字模块。 我使用 python 3.7 并确保套接字在我的库中。我的库也被映射为路径。
这是脚本我 运行ning:
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 的模块)。 我看到有类似的帖子,但 none 已经能够帮助我了。
编辑 #1
这里是python映射到path系统变量的方式:
编辑 #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.pyc
和 SocketServer.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 建议我使用以下代码获取主机名和会话名称,并将 python 用作登录脚本。
objTab=crt.GetScriptTab()
objConfig=objTab.Session.Config
strHostname=objConfig.GetOption('Hostname')
strSessName=objTab.Session.Path