【问题标题】:Compiled Python script "No handlers could be found for logger "paramiko.transport"编译的 Python 脚本“找不到记录器“paramiko.transport”的处理程序
【发布时间】:2016-10-27 19:49:38
【问题描述】:

我的问题与已经提出的这个问题非常相似: 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.util.log_to_file尝试了该链接中的解决方案?

标签: python python-2.7 ssh handler


【解决方案1】:

将控制台处理程序(例如)添加到 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)

【讨论】:

  • 完美,感谢费尔南德斯库斯塔。这解决了我的错误!
【解决方案2】:

对于遇到此问题的任何人,这是我完整的 Python 脚本,用于通过 SSH 连接到 HP ProCurve 交换机并打印“show run”命令的输出。在解决本文中提到的错误后,我遇到了另一个错误,密码模块无法与 PyInstaller 正确交互。此链接提供了该解决方案: 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2017-10-26
    • 1970-01-01
    • 2012-11-11
    • 2011-09-03
    相关资源
    最近更新 更多