可能我忽略了一些非常基本的东西。 我有一个功能
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 ??
答案 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项的元组,其中有一些东西是唯一的元素。