Python全局变量修改不起作用

时间:2016-05-23 15:50:44

标签: python

我正在尝试更新一个全局变量 AUTHEN ,它引用了套接字的输入流。

run()方法中,我正在尝试修改AUTHEN的值。但是,当我实际运行程序时,它永远不会改变。我确信我的服务器确实发送了除""

之外的其他消息
import threading
import sys
import time
import socket
import ssl

AUTHEN ="Something"
class timer(threading.Thread):

    def __init__(self):
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.ssl_sock = ssl.wrap_socket(self.sock, ssl_version=ssl.PROTOCOL_SSLv23)
        self.ssl_sock.connect(('localhost',9991))
        self.isrun = True
        threading.Thread.__init__(self)


    def send(self,str):
        self.ssl_sock.send(str + "\n")


    def run(self):
        global AUTHEN
        while self.isrun:
            receive = self.ssl_sock.recv(1024)
            AUTHEN = receive
            print("recv ->" +AUTHEN)
        self.sock.close()
        self.ssl_sock.close()


    def close(self):
        self.isrun == False


    def authentication(self,username,password):
        global AUTHEN
        print "Verifing identity"
        self.ssl_sock.send("U&P"+"sprt"+username+"sprt"+password+'\n')
        while (True):
            print AUTHEN
            if(AUTHEN == str("OK\r\n")):
                return AUTHEN   
            else:   
                print "Please Try again"
                break   

def main():
    client = timer()
    client.start()

#LOG IN 
while(True):
    loginMessage = str(raw_input("Please enter username and password as following format: \n username%password \n"))
    username = loginMessage.split("%")[0]
    password = loginMessage.split("%")[1]
    Result = client.authentication(username,password)
    if(Result == str("OK\r\n")):
        print "LOG IN SUCCESSFULLY"
        print "Welcome:\n","Command to be used:\n","-a filename\n" "-c number\n", "-f filename\n","-h hostname:port\n","-n name\n","-u certificate\n","-v filename certificate\n","otherwise input will be treated as normal message"
        break
if __name__=='__main__':
main()

谢谢。

2 个答案:

答案 0 :(得分:0)

您需要调用main()

你需要Start()你的线程来初始化Run(),这将设置你的全局变量。你的thread.start()在你的main()def中。

import threading

class ThreadClass(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        global a
        a = 'Test'
    def main(self):
        thread = ThreadClass()
        thread.start()

a= 'funny'
print a

ThreadClass().main()
print a


>>>funny
>>>Test

答案 1 :(得分:0)

尝试从代码中删除两个句子:

global AUTHEN;