2010-07-11 13 views
81

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

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

.

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

Donde dRecibved es la cadena de una línea leída por una conexión. Llama a una función simple que a partir de ahora solo 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 dividirlo en cada personaje y tratar de pasar los argumentos por el estilo. Funciona bien si solo llamo a la función normalmente, pero realmente me gustaría configurarla como un hilo separado.

+16

¿Por qué tiene punto y coma al final de cada línea? – Maikflow

Respuesta

152

Usted está tratando de crear una tupla, pero sólo estás parenthesizing una cadena :)

Añadir un extra '':

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

O utilizar paréntesis para hacer una lista:

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

Si se observa, desde el seguimiento de pila: self.__target(*self.__args, **self.__kwargs)

El *self.__args convierte su cadena en una lista de caracteres, pasándolos a la función processLine . Si le pasa una lista de un elemento, pasará ese elemento como primer argumento, en su caso, la cadena.

+3

Muchas gracias que lo resolvió – Anonymous

+15

Me siento tan estúpido en este momento ... – Radu

+1

¡Muchas gracias! – siesta

Cuestiones relacionadas