Tengo un problema con Python en el roscado y el envío de una cadena en los argumentos.

def processLine(line) :
    print "hello";
    return;

.

dRecieved = connFile.readline();
processThread = threading.Thread(target=processLine, args=(dRecieved));
processThread.start();

Donde dRecieved es la cadena de texto de una línea de lectura por una conexión. Se llama a una función simple que a partir de ahora sólo tiene un trabajo de impresión «hola».

Sin embargo me sale el siguiente error

Traceback (most recent call last):
File "C:\Python25\lib\threading.py", line 486, in __bootstrap_inner
self.run()
File "C:\Python25\lib\threading.py", line 446, in run
self.__target(*self.__args, **self.__kwargs)
TypeError: processLine() takes exactly 1 arguments (232 given)

232 es la longitud de la cadena que estoy tratando de pasar, así que supongo que es romperlo en cada personaje y tratando de pasar los argumentos como que. Funciona bien si acabo de llamar a la función con normalidad, pero realmente me gustaría configurarlo como un subproceso independiente.

  • ¿Por qué usted tiene signos de punto y coma al final de cada línea?
InformationsquelleAutor Anonymous | 2010-07-11

1 Comentario

  1. 250

    Usted está tratando de crear una tupla, pero solo se parenthesizing una cadena 🙂

    Añadir un extra ‘,’:

    dRecieved = connFile.readline()
    processThread = threading.Thread(target=processLine, args=(dRecieved,))  # <- note extra ','
    processThread.start()

    O utilizar los soportes para hacer una lista:

    dRecieved = connFile.readline()
    processThread = threading.Thread(target=processLine, args=[dRecieved])  # <- 1 element list
    processThread.start()

    Si se observa, a partir de la traza de la pila: self.__target(*self.__args, **self.__kwargs)

    La *self.__args convierte una cadena en una lista de personajes, pasando a la processLine
    la función. Si se le pasa una lista de elementos, va a pasar ese elemento como el primer argumento – en su caso, de la cadena.

    • Muchas gracias, que resolvió
    • extra entre paréntesis al final de la línea dos del segundo bloque de código. Quise editar pero es menos de 6 caracteres
    • aún ayudar a la gente en 2018. señor que me llevó una eternidad…
    • Si usted tiene arg2 con el valor predeterminado, haga esto. threading.Thread(target=thread_function, args=(arg1,),kwargs={'arg2': arg2})

Dejar respuesta

Please enter your comment!
Please enter your name here