2010-07-11 28 views
81

我有一個Python線程的問題,並在參數中發送一個字符串。Python線程字符串參數

def processLine(line) : 
    print "hello"; 
    return; 

dRecieved = connFile.readline(); 
processThread = threading.Thread(target=processLine, args=(dRecieved)); 
processThread.start(); 

其中dRecieved是由連接讀取的一行的字符串。它稱爲一個簡單的功能,它現在只有一個打印「你好」的工作。

不過,我得到以下錯誤

Traceback (most recent call last): 
File "C:\Python25\lib\threading.py", line 486, in __bootstrap_inner 
self.run() 
File "C:\Python25\lib\threading.py", line 446, in run 
self.__target(*self.__args, **self.__kwargs) 
TypeError: processLine() takes exactly 1 arguments (232 given) 

232是我試圖通過字符串的長度,所以我想它分解成每個字符,並試圖通過這樣的論點。它正常工作,如果我只是正常調用該函數,但我真的想把它設置爲一個單獨的線程。

+16

爲什麼每行末尾都有分號? – Maikflow 2015-09-21 02:55:00

回答

152

你想創建一個元組,但你只是圓括號字符串:)

添加一個額外的「」:

dRecieved = connFile.readline() 
processThread = threading.Thread(target=processLine, args=(dRecieved,)) # <- note extra ',' 
processThread.start() 

或者使用括號使一個列表:

dRecieved = connFile.readline() 
processThread = threading.Thread(target=processLine, args=[dRecieved])) # <- 1 element list 
processThread.start() 

如果您發現,從堆棧跟蹤:self.__target(*self.__args, **self.__kwargs)

*self.__args將您的字符串轉換爲字符列表,並將它們傳遞給processLine 函數。如果您將它傳遞給一個元素列表,它會將該元素作爲第一個參數傳遞 - 在您的情況下,即字符串。

+3

非常感謝你解決了這個問題 – Anonymous 2010-07-11 03:13:50

+15

我現在覺得很愚蠢...... – Radu 2012-11-28 20:37:20

+1

非常感謝你! – siesta 2013-12-11 21:23:10