python线程应用程序错误到许多参数

Căt*_*ilă 5 python multithreading python-2.7

这个python源代码有什么问题?

import threading
import subprocess as sub

def ben(fil):
    pr = sub.Popen(fil,stdout=sub.PIPE,stderr=sub.PIPE)
    output, errors = pr.communicate()
    print output

theapp = '''blender
            blender-softwaregl'''.split()
print theapp

for u in theapp:
    print u
    tr = threading.Thread(target=ben, args=(u))
    tr.daemon = True
    tr.start()
Run Code Online (Sandbox Code Playgroud)

错误是:

['blender', 'blender-softwaregl']
blender
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/threading.py", line 551, in __bootstrap_inner
    self.run()
  File "/usr/local/lib/python2.7/threading.py", line 504, in run
    self.__target(*self.__args, **self.__kwargs)
TypeError: ben() takes exactly 1 argument (7 given)

blender-softwaregl
Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/threading.py", line 551, in __bootstrap_inner
    self.run()
  File "/usr/local/lib/python2.7/threading.py", line 504, in run
    self.__target(*self.__args, **self.__kwargs)
TypeError: ben() takes exactly 1 argument (18 given)
Run Code Online (Sandbox Code Playgroud)

这是我的问题.这个错误是什么?

 TypeError: ben() takes exactly 1 argument (18 given)
Run Code Online (Sandbox Code Playgroud)

Blc*_*ght 15

期望序列的args参数threading.Thread,但是你提供了一个字符串.这导致它将字符串的每个字母解释为单个参数,从而导致目标函数的参数太多.

你非常接近拥有正确的代码.您只需要通过在父级中添加一个尾随逗号来修复元组语法:

tr = threading.Thread(target=ben, args=(u,)) # comma makes args into a 1-tuple
Run Code Online (Sandbox Code Playgroud)