小さなプロジェクトとして、私は小さなチャットルームを作成しました。コードは次のとおりです。私はプログラミングに不慣れであるため、構造が効率的でない可能性があることを指摘できます。
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ファイルとusers.pyが存在する限り、Pythonで完全に正常に機能します。.exeに変換すると問題が発生しますが、users.pyファイルが永続的に書き込まれない(一時的に書き込まれる)場合を除いて、問題は正常に機能します。関連するコーディングには#hereのマークが付いています。
私のセットアップコードは次のとおりです。
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は、単に(user:password)の辞書です。
users = {
'admin' : '2588619',
'john' : '1234',
'username' : 'password',
}
では、どうすればそれを.exeに変換して、users.pyが永続的に書き込まれるようにすることができますか?