已编译 Python 脚本 "No handlers could be found for logger "paramiko.transport"

Compiled Python script "No handlers could be found for logger "paramiko.transport"

我的问题与已经提出的这个问题非常相似: No handlers could be found for logger paramiko

不同之处在于,我的脚本 运行 在 Python 解释器中完全正常,但在使用 PyInstaller 编译为 exe 文件时会抛出上述错误。我尝试了几个不同的日志记录处理程序但没有成功,我正在寻找一个我可以从任何 Windows 系统 运行 的独立可执行文件。这是我的脚本供参考:

from netmiko import ConnectHandler
net_connect = ConnectHandler(device_type='hp_procurve', ip='10.1.2.20', username='myusername', password='mypassword')  
output = net_connect.send_command("show run")
print output
net_connect.disconnect()
raw_input("Press enter to exit...")

感谢您的帮助!

将控制台处理程序(例如)添加到 paramiko.transport:

paramiko_logger = logging.getLogger('paramiko.transport')
if not paramiko_logger.handlers:
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(
        logging.Formatter('%(asctime)s | %(levelname)-8s| PARAMIKO: '
                          '%(lineno)03d@%(module)-10s| %(message)s')
        )
    paramiko_logger.addHandler(console_handler)

对于 运行 了解此内容的任何人,这里是我的完整 Python 脚本,用于通过 SSH 连接到 HP ProCurve 交换机并打印 "show run" 命令的输出。我 运行 遇到另一个错误,在 post 中提到的错误得到解决后,加密模块无法与 PyInstaller 正确交互。 link 提供了解决方案: https://github.com/pyinstaller/pyinstaller/issues/2013

def patch_crypto_be_discovery():
    from cryptography.hazmat import backends
    try:
        from cryptography.hazmat.backends.commoncrypto.backend import backend as be_cc
    except ImportError:
        be_cc = None
    try:
        from cryptography.hazmat.backends.openssl.backend import backend as be_ossl
    except ImportError:
        be_ossl = None
    backends._available_backends_list = [
        be for be in (be_cc, be_ossl) if be is not None
]
import logging
paramiko_logger = logging.getLogger('paramiko.transport')
if not paramiko_logger.handlers:
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(
        logging.Formatter('%(asctime)s | %(levelname)-8s| PARAMIKO: '
                      '%(lineno)03d@%(module)-10s| %(message)s')
    )
paramiko_logger.addHandler(console_handler)
from netmiko import ConnectHandler
net_connect = ConnectHandler(device_type='hp_procurve', ip='10.1.2.20', username='myusername', password='mypassword')  
output = net_connect.send_command("show run")
print output
net_connect.disconnect()
raw_input("Press enter to exit...")

我还需要运行这个命令来将脚本编译成 exe:

pyinstaller --onefile --hidden-import cryptography.hazmat.backends.openssl --hidden-import cffi HP-ProCurve-ShowRun.py