簡體   English   中英

Python全局變量修改不起作用

[英]Python Global variable modification does not work

我正在嘗試更新一個引用套接字輸入流的全局變量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()

謝謝。

你需要調用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

嘗試從代碼中刪除兩個句子:

global AUTHEN;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM