2013-03-07 70 views
0

可能我忽略了一些非常基本的東西。 我有一個函數Python中的線程錯誤

def execution(command): 
    os.system(command) 

而另一功能

def start_this_thread(): 
    server_thread = threading.Thread(target=execution, args=(exec_str)) 
    server_thread.start() 

我得到一個錯誤:

self.run() 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 483, in run 
    self.__target(*self.__args, **self.__kwargs) 
TypeError: execution() takes exactly 1 argument (233 given) 

Aparently字符串長度(命令)是長度233的??

回答

2

好吧..我想通了..

而不是

server_thread = threading.Thread(target=execution, args=(exec_str)) 

應該

server_thread = threading.Thread(target=execution, args=(exec_str,)) 

雖然很想知道爲什麼?

+0

因爲當你想定義只有1個參數的元組時,你需要寫(blabla,)not(blabla)。當你運行'threading.Thread(target = execution,args =(exec_str))'時,例如'exec_str' =='123'參數將等於'['1','2','3' ]'不''''123']' – 2013-03-07 08:43:46

0

你的問題是args得到擴展,afaik意味着exec_string從1項進入到233.嘗試在exec_string後面加一個逗號,使其成爲文字元組而不是括號。我現在正在使用移動設備,但明天會在格式和清晰度方面進行編輯。在某些情況下,(something)==某事,但(something,)是一個元素的唯一元素的元素的元組。

1

args被簡單地解釋爲一系列參數。你傳入了(args_str),這是一個字符串(因爲括號對被簡單地解釋爲分組,而不是元組構造函數)。因此,該字符串被作爲序列擴展爲233個單獨的參數(字符串中的每個字符一個)。

改爲使用(args_str,)(注意尾隨逗號)來創建一個元素的元組。