2013-03-07 57 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,)(注意尾随逗号)来创建一个元素的元组。