作为一个小项目,我创建了一个小聊天室。代码如下,我可以指出我是编程新手,因此结构可能效率不高:
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 只是(用户:密码)的字典:
users = {
'admin' : '2588619',
'john' : '1234',
'username' : 'password',
}
那么如何将其转换为 .exe 并使其永久写入 users.py 呢?