python中的线程错误

时间:2013-03-07 08:27:15

标签: 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)

字符串长度(命令)通常长度为233 ??

3 个答案:

答案 0 :(得分:2)

好的..我明白了..

而不是

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

应该是

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

虽然很想知道为什么?

答案 1 :(得分:1)

args被简单地解释为一系列参数。你传入了(args_str),这是一个字符串(因为这对括号只被解释为分组,而不是元组构造函数)。因此,字符串作为一个序列扩展为233个单独的参数(一个用于字符串中的每个字符)。

使用(args_str,)代替(注意尾随逗号)来创建单元素元组。

答案 2 :(得分:0)

你的问题是args被扩展了,afaik意味着exec_string从1项进入233.尝试在exec_string之后加一个逗号使它成为一个文字元组而不是括号。我现在正在使用移动设备,但明天会进行编辑,以便进行格式化和清晰。

在python中,(某事)==某事,但(某事),是一个1项的元组,其中有一些东西是唯一的元素。