Python报错TypeError 'object' is not callable 如何解决?

by_gareth_8023 2016-03-06 05:45:15
主程序mcc.py代码如下:

#coding=utf-8
import time
import sys
from utils.mailHelper import mailHelper
from utils.excutor import executor
from utils.configReader import configReader
reload(sys)
sys.setdefaultencoding('utf-8')

class MCC(object):
CONFIGPATH='_config.ini'
KEY_COMMAND='Command'
KEY_OPEN='Open'
KEY_BOSS='Boss'
KEY_TIMELIMIT='timelimit'

def __init__(self):
self.mailHelper=mailHelper()
self.configReader=configReader(self.CONFIGPATH)
commandDict=self.configReader.getDict(self.KEY_COMMAND)
openDict=self.configReader.getDict(self.KEY_OPEN)
self.timelimit=int(self.configReader.readConfig(self.KEY_BOSS,self.KEY_TIMELIMIT))
self.excutor=executor(commandDict,openDict)
self.toRun()

def toRun(self):
while True:
self.run()
time.sleep(self.timelimit)

def run(self):
mailBody=self.mailHelper.acceptMail()
if mailBody:
exe=self.mailHelper.analysisMail(mailBody)
if exe:
self.excutor.execute(exe)

if __name__=='__main__':
mcc=MCC()

注:这是在网上学的一个通过收发邮件控制电脑完成简单命令的程序代码
其他模块代码:
configReader.py

# coding=utf-8
import ConfigParser
import os,sys

class configReader(object):
def __init__(self,configPath):
configFile=os.path.join(sys.path[0],configPath)
self.cReader=ConfigParser.ConfigParser()
self.cReader.read(configFile)

def readConfig(self,section,item):
return self.cReader.get(section,item)

def getDict(self,section):
commandDict={}
items=self.cReader.items(section)
for key,value in items:
commandDict[key]=value
return commandDict


excutor.py

#coding=utf-8
import os
import mailHelper
import win32api
from utils.mccLog import mccLog
class executor(object):
def __init__(self,commandDict,openDict):
self.mccLog=mccLog()
self.mailHelper=mailHelper()
self.commandDict=commandDict
self.openDict=openDict

def execute(self,exe):
subject=exe['subject']
self.mccLog.mccWriteLog(u'开始处理命令。')
self.mailHelper.sendMail('pass','Slave')
if subject in self.commandDict:
self.mccLog.mccWriteLog(u'执行命令')
try:
command=self.commandDict[subject]
os.system(command)
self.mailHelper.sendMail('Success','Boss')
self.mccLog.mccWriteLog(u'执行命令成功')
except Exception,e:
self.mccLog.mccError(u'执行命令失败'+str(e))
self.mailHelper.sendMail('error','Boss',e)
elif subject in self.openDict:
self.mccLog.mccWriteLog(u'打开文件')
try:
openFile=self.openDict[subject]
win32api.ShellExecute(0,'open',openFile,'','',1)
self.mailHelper.sendMail('Success','Boss')
self.mccLog.mccWriteLog(u'打开文件成功')
except Exception,e:
self.mccLog.mccError(u'打开文件失败'+str(e))
self.mailHelper.sendMail('error','Boss',e)
else:
self.mailHelper.sendMail('error','boss','no such command')


mailHelper.py

#coding=utf-8
from email.mime.text import MIMEText
from configReader import configReader
from mccLog import mccLog
import poplib
import smtplib
import re

class mailHelper(object):
CONFIGPATH='_config.ini'

def __init__(self):
self.mccLog=mccLog()
cfReader=configReader(self.CONFIGPATH)
self.pophost=cfReader.readConfig('Slave','pophost')
self.smtphost=cfReader.readConfig('Slave','smtphost')
self.port=cfReader.readConfig('Slave','port')
self.username=cfReader.readConfig('Slave','username')
self.password=cfReader.readConfig('Slave','password')
self.bossMail=cfReader.readConfig('Boss','mail')
self.loginMail()
self.configSlaveMail()

def loginMail(self):
self.mccLog.mccWriteLog(u'开始登录邮箱')
try:
self.pp=poplib.POP3_SSL(self.pophost)
self.pp.set_debuglevel(0)
self.pp.user(self.username)
self.pp.pass_(self.password)
self.pp.list()
print u'登录成功!'
self.mccLog.mccWriteLog(u'登录邮箱成功。')
except Exception,e:
print u'登录失败!'
self.mccLog.mccError(u'登录邮箱失败'+str(e))
exit()

def acceptMail(self):
self.mccLog.mccWriteLog(u'开始抓取邮件')
try:
ret=self.pp.list()
mailBody=self.pp.retr(len(ret[1]))
self.mccLog.mccWriteLog(u'抓取邮件成功')
return mailBody
except Exception,e:
self.mccLog.mccError(u'抓取邮件失败'+str(e))
return None

def analysisMail(self,mailBody):
self.mccLog.mccWriteLog(u'开始抓取subject和发件人')
try:
subject=re.search(" 'Subject:(.*?)',",str(mailBody[1]).decode('utf-8'),re.S).group(1)
sender=re.search(" 'X-Sender:(.*?)',",str(mailBody[1]).decode('utf-8'),re.S).group(1)
command={'subject':subject,'sender':sender}
self.mccLog.mccWriteLog(u'抓取subject和发件人成功')
return command
except Exception,e:
self.mccLog.mccError(u'抓取subject和发件人失败'+str(e))
return None

def configSlaveMail(self):
self.mccLog.mccWriteLog(u'开始配置发件箱')
try:
self.handle=smtplib.SMTP(self.smtphost,self.port)
self.handle.login(self.username,self.password)
self.mccLog.mccWriteLog(u'发件箱配置成功')
except Exception,e:
self.mccLog.mccError(u'发件箱配置失败'+str(e))
exit()

def sendMail(self,subject,receiver,body='Success'):
msg=MIMEText(body,'plain','utf-8')
msg['Subject']=subject
msg['from']=self.username
self.mccLog.mccWriteLog(u'开始发送邮件'+'to'+receiver)
if receiver =='Slave':
try:
self.handle.sendmail(self.username,self.username,msg.as_string())
self.mccLog.mccWriteLog(u'发送邮件成功')
return True
except Exception,e:
self.mccLog.mccError(u'发送邮件失败'+str(e))
return False
elif receiver =='Boss':
try:
self.handle.sendmail(self.username,self.bossMail,msg.as_string())
self.mccLog.mccWriteLog(u'发送邮件成功')
except Exception,e:
self.mccLog.mccError(u'发送邮件失败'+str(e))
return False

if __name__ == '__main__':
mail=mailHelper()
body=mail.acceptMail()
print body
print mail.analysisMail(body)
mail.sendMail('test','Boss')


mccLog.py

#coding:utf-8
import logging
from datetime import datetime

class mccLog(object):
def __init__(self):
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename=datetime.now().strftime("%Y%m%d%H%M%S")+'.log',
filemode='a')

def mccWriteLog(self,logContent):
logging.info(logContent)

def mccError(self,errorContent):
logging.error(errorContent)


以下是程序运行截图:


求助~急~
...全文
39976 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
学徒一个 2019-06-18
  • 打赏
  • 举报
回复
看不懂
dream_uping 2018-11-18
  • 打赏
  • 举报
回复
这就是传说中的通过电脑来邮件通知被入侵的电脑?
by_gareth_8023 2016-03-08
  • 打赏
  • 举报
回复
引用 1 楼 zzgzzg00 的回复:
引入的某个模块不是方法 你看下报错的位置
就拿 mcc=MCC()这里来说,这里不是构建一个MCC的实例吗?。excutot.py里面的这句self.mccLog=mccLog(),也类似啊,但这里就没有报错
大道如海 2016-03-06
  • 打赏
  • 举报
回复
可能是excutor.py 的import方式不对, import mailHelper 改成 from utils.mailHelper import mailHelper 试试
似梦飞花 2016-03-06
  • 打赏
  • 举报
回复
引入的某个模块不是方法 你看下报错的位置

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧