2012-12-18 2 views
1

작은 프로젝트로서 나는 작은 대화방을 만들었습니다.py2exe : 변환 된 코드는 한번 수정 된 코드

import re, time 
user_name = 0 
password = 0 
chatroom = 0 

from users import users 
def startup(): 
     global user_name, password, chatroom 
     print "\n" * 100 
     user_name = raw_input("Your username: ").upper() 
     if users.has_key(str(user_name).lower()) == True: 
      password = str(raw_input("Password: ")) 
      while str(users[user_name.lower()]) != str(password): 
        print "Incorrect password." 
        time.sleep(2) 
        startup() 
      else: 
        chatroom = raw_input("Room name: ").lower() 
        chat() 
     else: 
      print "Invalid username." 
      time.sleep(2) 
      startup() 

def showchat(): 
     global user_name 
     file = open(str(chatroom) + ".txt","r+") 
     messages = str(file.read()[-700:]) 
     file.close 
     messages = messages.rstrip('\n') 
     print "\n" * 40 
     print messages 
     print "------ type 'r' to refresh the screen ------" 

def writechat(): 
     global user_name, chatroom 
     n = raw_input("________________________________________________________" + "\n" + user_name + ": ")  
     if user_name.lower() == 'admin': 
      if n == "clear": 
        file = open(str(chatroom) + ".txt","w") 
        file.write("") 
        file.close 
      elif n == "addnewuser": 
        x = "'" + raw_input("new username: ") + "'" 
        y = "'" + raw_input("new password: ") + "'" 
        file = open("users.py","r").read() 
        file = file.replace("'username' : 'password',", x + " : " + y + "," + "'username' : 'password',") 
        open("users.py","w").write(file) 
      elif n == "r": 
        chat() 
      elif n == "logout": 
        startup() 
      else: 
        file = open(str(chatroom) + ".txt","a") 
        file.write(user_name + ": " + str(n) + "\n") 
        file.close() 
     else: 
      if n == "r": 
        chat() 
      elif n == "changepassword": 
        file = open("users.py","r") 
        file.read() 
        oldpass = raw_input("New password: ") 
        users[user_name.lower()] = oldpass 
        print users 
        file.close() 
        file = open("users.py","w") 
        file.write("users = " + str(users))   #here 
        file.close() 
      elif n == "logout": 
        startup() 
      else: 
        file = open(str(chatroom) + ".txt","a") 
        file.write(user_name + ": " + str(n) + "\n") 
        file.close() 

def chat(): 
     showchat() 
     writechat() 
     chat() 


startup() 

이 코드는 같은 길이의 chatroom.txt 파일이 사용자뿐만 아니라 존재하는 파이썬 완벽하게 잘 작동 : 코드는 내가 구조가 효율적으로되지 않을 수 있습니다 내가 프로그래밍에 새로운 오전 것을 지적 할 수있다, 다음과 같습니다. py. .exe로 변환하면 문제가 발생합니다. 즉, users.py 파일이 영구적으로 (일시적으로) 작성되지 않아야 할 때, 관련 코딩이 #here로 표시된다는 것 외에는 문제가 없습니다. 다음과 같이

내 설치 코드는 다음과 같습니다 (: 암호 사용자) : 그래서

users = { 
'admin' : '2588619', 
'john' : '1234', 
'username' : 'password', 
} 

가 어떻게 .exe를로 변환 및 않는

from distutils.core import setup 
import py2exe, sys, os 

sys.argv.append('py2exe') 

setup(
    options = {'py2exe' : { 
'packages': ['users'], 
"bundle_files" : 2, 
}}, 
    console = [{'script': "chatroom.py"}], 
    zipfile = None, 
) 

users.py는 단순히 단지 사전입니다 users.py가 영구적으로 작성되도록 하시겠습니까?

답변

1

py2exe로 만든 패키지는 파이썬 인터프리터와 프로그램이 포함 된 자동 압축 해제 아카이브 일뿐입니다. .exe가 실행될 때마다 내부의 모든 내용이 임시 디렉토리에서 추출되고 추출 된 인터프리터가 프로그램을 실행합니다. 즉, users.py을 소스 코드와 함께 입력하면 달성하려는 것은 불가능합니다.

users = open(os.path.join(os.path.expanduser('~'), '_MyProgram', 'users.py')) 

은 분명히 당신이 디렉토리가 존재하는지 확인해야하고, 결국를 만들 :

당신은 예를 들어, 일부 사용자 디렉토리에 users.py 파일을 작성해야합니다.

이 매개 변수는 data_files 매개 변수를 전달하는 py2exe에 의해 자동으로 수행 될 수 있습니다.

+0

감사합니다. 사용자 파일을 텍스트 (: –

0

필자는 py2exe가 users.py라는 이름으로 생각한다고 생각합니다. 처리해야 할 파일이라고 생각합니다. user.db 또는 다른 이름으로 이름을 바꿉니다. 그게 작동하는지 확인하십시오.