使用pxssh和python日志记录错误处理错误

时间:2014-02-05 20:19:59

标签: python logging

好的,我正在努力获取任何超时,连接失败,密码被拒绝...以记录日志。我在我的控制台中收到TIMEOUT的警告,但没有其他工作正在进行,我现在正在获得TypeError: 'int' object is not callable。我知道我接近破解这个,但现在我的车轮旋转。任何帮助是极大的赞赏。谢谢!

CODE

import pexpect
import pxssh
import getpass
import sys
import os
import re
import traceback
from pyparsing import *
import logging

lgr = logging.getLogger('error_config')
lgr.setLevel(logging.DEBUG)

ec = logging.FileHandler('error_config.log')
ec.setLevel(logging.WARNING)

frmt = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ec.setFormatter(frmt)

lgr.addHandler(ec)


def die(s, errstr):
    logging.warning(errstr)
    logging.warning(s.before, s.after)
    s.terminate()
    sys.exit(1)


def main():
    s = pxssh.pxssh(timeout=60, maxread=2000000)
    s.force_password = True
    hostname = raw_input('Hostname: ')
    username = raw_input('Username: ')
    password = getpass.getpass('password: ')
    s.PROMPT = 'SSH> '
    s.login(hostname, username, password, auto_prompt_reset=False)
    logging.info("test")
    logging.info("Logged in")

    i = s.expect([pexpect.TIMEOUT, 'Permission denied', pexpect.EOF])
    if i == 0:
        die(s, 'Timed out. SSH log:')
    elif i == 1:
        die(s, 'Incorrect password. SSH log:')
    elif i == 2:
        print s.before

STACK TRACE

Traceback (most recent call last):
  File "logging/__init__.py", line 731, in emit
  File "logging/__init__.py", line 617, in format
  File "logging/__init__.py", line 405, in format
  File "logging/__init__.py", line 276, in getMessage
TypeError: not all arguments converted during string formatting
1
Traceback (most recent call last):
  File "error_config.py", line 91, in ?
    main()
  File "error_config.py", line 43, in main
    die(s, 'Time out. SSH log:')
  File "error_config.py", line 27, in die
    sys.exit(1)
SystemExit: 1

1 个答案:

答案 0 :(得分:1)

logging.WARNINGint所以你不能这样做:

logging.WARNING(errstr)
logging.WARNING(s.before, s.after)

我认为您打算使用logging.warning代替:

logging.warning(errstr)
logging.warning(s.before, s.after)
编辑后,似乎exit被覆盖,可能是from pyparsing import *

尝试添加import sys并使用sys.exit

exit内容