Я пытаюсь использовать модуль сокета в сценарии входа для 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 отображается на путисистемная переменная:
РЕДАКТИРОВАТЬ # 2
Попытка перемещения _socket.py и socket.py для версии3.7 в ту же директорию, что и скрипт, но все равно получаю ошибки. edit * также socket.cpython-37.pyc
EDIT # 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
Это заставляет меня поверить, что онииспользуете версию 2.7.Когда я искал внутри vpython27.zip
«сокет», socket.pyc
и SocketServer.pyc
были единственными найденными предметами.Означает ли это, что я хотел бы найти socket.py
или любые другие зависимости для версии 2.7 и переместить их туда?
EDIT # 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
Это решение отлично подходит для моей среды.