Re: [Python-es] duda con subprocess.Popen
El problema es que yo uso mi propia librería de procesos basada en eventos, y aún no la tengo integrada con el sistema de eventos de pygtk. En tu caso y pensandolo mejor no necesitas otro proceso, y además hacerlo a pelo sería demasiado complicado. Con un trhead es suficiente y no necesitas ni sockets ni serializar los datos. Para el hilo http://docs.python.org/library/threading.html#thread-objects Para recorrer los directorios http://docs.python.org/library/os.html#os.walk Para recojer lo datos que necesites (fecha, tamaño, propietario...) http://docs.python.org/library/os.path.html Para pasar los datos del thread que recore los directorios al thread principal no hay que hacer muchos malabarismos: - Puedes o bien usar directamente la lista, el diccionario o el objeto que sea, con la única precaución de utilizar locks en donde sea necesario. Por ejemplo que un thread modifique una lista mientras otro thread esta iterándola puede ser peligroso. - Más fácil aún pues te evitas cualquier problema de estos, es que el thread hijo provoque un evento que el thread padre procesará cuando le toque. De modo que sólo es el proceso padre el que accede a dicho diccionario, lista o lo que sea. Siento no serte de mayor ayuda. Hace mucho que no toco threads ni pygtk. El mié, 26-01-2011 a las 07:22 -0500, Tony Peña escribió: podrias poner un ejemplo claro? y corto para poder asociarlo a lo que tengo? gracias El 26 de enero de 2011 04:12, tny a.por...@gmail.com escribió: El mar, 25-01-2011 a las 14:50 -0400, Tony Peña escribió: disculpen es el mismo correo pero .. necesito ir parseando ese fichero _no_ luego _sino_ mientras lo va creando una onda como que en lo que se va desarrollando yo irle haciendo un tail -f al fichero que el subprocess(cmd) esta ejecutando...pero dentro de python para usarlo contra el objeto eso :) Yo no usaría ls, yo lo haría desde python, en un proceso hijo que me escribiese en un socket AF_UNIX o en un pipe los datos que necesito según los va adquiriendo. La ventaja es que te evitas esperar por buffers, y también te evitas tener que parsear el texto, porque enviarías directamente un diccionario (o una tupla) serializado con pickle. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] ¿Cómo manejo los caracteres especiales?
El 26 de enero de 2011 18:55, Daπid davidmen...@gmail.com escribió: 2011/1/26 Douglas Jiménez doug...@gmail.com: Confieso (espero que no sea una especie de sacrilegio) que no sabía que se podían enviar mensajes de acción al intérprete. En realidad, tenía muchos años sin programar. Siempre había pensado que una línea de comentario comenzaba con un caracter particular que le decía al interprete (o compilador) que todo lo que estaba hasta el final de la línea no debía ser tomado en cuenta. Ignoro si hay más casos, pero el encode es una orden bastante especial. De hecho, no puede ir en cualquier sitio, sino que sólo es válido en la primera o segunda línea del programa. Creo que en alguna parte lo leí como magic comment D. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] duda con subprocess.Popen
vale, ya andaba por thread a ver si me resultaba pero estube pensando tambien otra opcion que quizas sea otra via es que: podria abrir el fichero antes de ejecutar el proceso y ponerle un seek(0) como posicion inicial, ejecutar con el thread el proceso, y mientras esta escribiendo el seek comience a ir parseando y hacer un recorrido hasta donde se vaya creando mientras se parsea como 2das cosas que debe hacer, y luego seguir recorriendo el fichero con el mismo seek eso podria resolver tambien? vaya es algo tan sencillo como cualquiera que manda a hacer algo en bash y le mande la salida a un log y por otro lado este el tail -f mirando el log que se ve como avanza cuando sucede algo y sino se queda esperando hasta que le pasen el Ctrl C entiendes? bueno eso mismo pero en python saludos El 27 de enero de 2011 05:29, tny a.por...@gmail.com escribió: El problema es que yo uso mi propia librería de procesos basada en eventos, y aún no la tengo integrada con el sistema de eventos de pygtk. En tu caso y pensandolo mejor no necesitas otro proceso, y además hacerlo a pelo sería demasiado complicado. Con un trhead es suficiente y no necesitas ni sockets ni serializar los datos. Para el hilo http://docs.python.org/library/threading.html#thread-objects Para recorrer los directorios http://docs.python.org/library/os.html#os.walk Para recojer lo datos que necesites (fecha, tamaño, propietario...) http://docs.python.org/library/os.path.html Para pasar los datos del thread que recore los directorios al thread principal no hay que hacer muchos malabarismos: - Puedes o bien usar directamente la lista, el diccionario o el objeto que sea, con la única precaución de utilizar locks en donde sea necesario. Por ejemplo que un thread modifique una lista mientras otro thread esta iterándola puede ser peligroso. - Más fácil aún pues te evitas cualquier problema de estos, es que el thread hijo provoque un evento que el thread padre procesará cuando le toque. De modo que sólo es el proceso padre el que accede a dicho diccionario, lista o lo que sea. Siento no serte de mayor ayuda. Hace mucho que no toco threads ni pygtk. El mié, 26-01-2011 a las 07:22 -0500, Tony Peña escribió: podrias poner un ejemplo claro? y corto para poder asociarlo a lo que tengo? gracias El 26 de enero de 2011 04:12, tny a.por...@gmail.com escribió: El mar, 25-01-2011 a las 14:50 -0400, Tony Peña escribió: disculpen es el mismo correo pero .. necesito ir parseando ese fichero _no_ luego _sino_ mientras lo va creando una onda como que en lo que se va desarrollando yo irle haciendo un tail -f al fichero que el subprocess(cmd) esta ejecutando...pero dentro de python para usarlo contra el objeto eso :) Yo no usaría ls, yo lo haría desde python, en un proceso hijo que me escribiese en un socket AF_UNIX o en un pipe los datos que necesito según los va adquiriendo. La ventaja es que te evitas esperar por buffers, y también te evitas tener que parsear el texto, porque enviarías directamente un diccionario (o una tupla) serializado con pickle. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] regex
El 27 de enero de 2011 12:27, chakalinux chakali...@gmail.com escribió: Hola, intento buscar palabras en una cadena usando regexp, a ver si me explico, si tengo por ejemplo esta cadena: cad = uhola como están Quiero que me re me encuentre la cadena cad (puede variar) independientemente de su posición, (creo que se llama lookahead), o sea: como estan ustedes hola = true hola, ustedes estan bien ? como están = true [...] Solo he llegado a esto: re.match((?=.*hola)(?=.*como)(?=.*est.n), cad) Esto me funciona pero no me interesa ya que me devuelve siempre true aunque ponga: algohola algocomo algoestan y si quito .* no me funciona y solo me interesa que encuentra las palabras exactas independientemente del orden que estén. ... No he entendido nada. A ver si me aclaro... Tienes una cadena inicial, por ejemplo c1=hola como estan. Luego tienes una segunda cadena c2. Y ahora quieres ... (1) saber is c1 es parte de c2. (2) saber si todas las palabras de c1 estan en c2. (3) saber si alguna de las palabras de c1 esta en c2. (4)... ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] regex
El día 27 de enero de 2011 18:27, chakalinux chakali...@gmail.com escribió: Hola, intento buscar palabras en una cadena usando regexp, a ver si me explico, si tengo por ejemplo esta cadena: cad = uhola como están Quiero que me re me encuentre la cadena cad (puede variar) independientemente de su posición, (creo que se llama lookahead), o sea: como estan ustedes hola = true hola, ustedes estan bien ? como están = true [...] Solo he llegado a esto: re.match((?=.*hola)(?=.*como)(?=.*est.n), cad) Esto me funciona pero no me interesa ya que me devuelve siempre true aunque ponga: algohola algocomo algoestan y si quito .* no me funciona y solo me interesa que encuentra las palabras exactas independientemente del orden que estén. No entiendo bien qué problema planteas. El lookahead (ver adelante) sirve para vincular un patrón de búsqueda con lo que aparece más adelante en la cadena. En realidad en el patrón de búsqueda que propones no indicas qué tiene que buscar (los lookahead no seleccionan nada). Si tienes las cosas claras, puede que el módulo 're' sirva para tus propósitos, pero a veces es mejor no obsesionarse con ello y tratar de hacerte tus propias búsquedas a medida. Otra forma de verlo es descomponiendo el problema en procesos más sencillos, tal vez concatenando dos búsquedas. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] regex
Hola, Entiendo que quieres buscar que todas las palabras de la cadena estén presentes, en cualquier orden, por lo menos una vez. Si esto es correcto, no te convendría mejor separar estas palabras y buscarlas una por una? Una expresión regular para esto, especialmente *si pueden cambiar de orden* me parece que sería algo rebuscado, si es que es posible (no se me ocurre como de momento). Algo así como: # s es la cadena a probar; cad contiene las palabras a buscar en 's'. s = x for p in cad.split(): if not s.find(p): return 'no-match' # si llega aqui, encontró todas las palabras de la lista return 'match' Lo simple del código me sugiere que podría ser la solución más correcta y transparente. Gerardo chakalinux wrote: Hola, intento buscar palabras en una cadena usando regexp, a ver si me explico, si tengo por ejemplo esta cadena: cad = uhola como están Quiero que me re me encuentre la cadena cad (puede variar) independientemente de su posición, (creo que se llama lookahead), o sea: como estan ustedes hola = true hola, ustedes estan bien ? como están = true [...] Solo he llegado a esto: re.match((?=.*hola)(?=.*como)(?=.*est.n), cad) Esto me funciona pero no me interesa ya que me devuelve siempre true aunque ponga: algohola algocomo algoestan y si quito .* no me funciona y solo me interesa que encuentra las palabras exactas independientemente del orden que estén. ... Un saludo ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] regex
No lo tengo claro si es lookahead o no, el tema es buscar palabras independientemente del orden que aparezcan Replanteo la pregunta: ¿ Hay alguna manera usando (regex o no) para que localice la cadena independientemente del orden ? Se me ocurre algo como: msg=hola gente, ubuntu esta bien. Alguien me puede decir que es? patron=que es ubuntu Comprueba(msg, patron) def Comprueba(msg, patron): for word in patron.split(): if msg.find(word) == -1: return False return True Un saludo El 27 de enero de 2011 19:53, Chema Cortes pych...@gmail.com escribió: El día 27 de enero de 2011 18:27, chakalinux chakali...@gmail.com escribió: Hola, intento buscar palabras en una cadena usando regexp, a ver si me explico, si tengo por ejemplo esta cadena: cad = uhola como están Quiero que me re me encuentre la cadena cad (puede variar) independientemente de su posición, (creo que se llama lookahead), o sea: como estan ustedes hola = true hola, ustedes estan bien ? como están = true [...] Solo he llegado a esto: re.match((?=.*hola)(?=.*como)(?=.*est.n), cad) Esto me funciona pero no me interesa ya que me devuelve siempre true aunque ponga: algohola algocomo algoestan y si quito .* no me funciona y solo me interesa que encuentra las palabras exactas independientemente del orden que estén. No entiendo bien qué problema planteas. El lookahead (ver adelante) sirve para vincular un patrón de búsqueda con lo que aparece más adelante en la cadena. En realidad en el patrón de búsqueda que propones no indicas qué tiene que buscar (los lookahead no seleccionan nada). Si tienes las cosas claras, puede que el módulo 're' sirva para tus propósitos, pero a veces es mejor no obsesionarse con ello y tratar de hacerte tus propias búsquedas a medida. Otra forma de verlo es descomponiendo el problema en procesos más sencillos, tal vez concatenando dos búsquedas. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] regex
Tan mal me explico ? a ver. quería buscar una cadena teniendo en cuenta unos patrones, los patrones pueden variar su orden (a, b, c OR b, c, a OR c, b ,a [...]) peor ya lo he resuelto. Es un programa para el irc que conecta a una base de datos sqlite3 y responde según la pregunta, por ejemplo: pepito: Que es ubuntu? bot: pepito, http://es.wikipedia.org/wiki/Ubuntu La respuesta del bot es automática, en este caso los patrones son: que es ubuntu, si el usuario pepito hubiera preguntado: pepito: ubuntu ... y eso que es ? La respuesta sería la misma, a eso me refería antes con independientemente del orden buscar la cadena. La función es esta: def SearchQuestion(name): cnn = sqlite3.connect(db/profe.db) pexc = cnn.cursor() patron, msg = pexc.execute(u'SELECT patron, respuesta FROM profe;').fetchone() cnn.close() name = name.rstrip(?).rstrip(¿) cicle = False if patron: for word in patron.split(): for word2 in name.split(): if word2 == word: cicle = True break if not cicle:return None cicle = False return msg return None Un saludo y perdona si no me explique correctamente. El 27 de enero de 2011 19:06, Jose Caballero jcaballero@gmail.comescribió: El 27 de enero de 2011 12:27, chakalinux chakali...@gmail.com escribió: Hola, intento buscar palabras en una cadena usando regexp, a ver si me explico, si tengo por ejemplo esta cadena: cad = uhola como están Quiero que me re me encuentre la cadena cad (puede variar) independientemente de su posición, (creo que se llama lookahead), o sea: como estan ustedes hola = true hola, ustedes estan bien ? como están = true [...] Solo he llegado a esto: re.match((?=.*hola)(?=.*como)(?=.*est.n), cad) Esto me funciona pero no me interesa ya que me devuelve siempre true aunque ponga: algohola algocomo algoestan y si quito .* no me funciona y solo me interesa que encuentra las palabras exactas independientemente del orden que estén. ... No he entendido nada. A ver si me aclaro... Tienes una cadena inicial, por ejemplo c1=hola como estan. Luego tienes una segunda cadena c2. Y ahora quieres ... (1) saber is c1 es parte de c2. (2) saber si todas las palabras de c1 estan en c2. (3) saber si alguna de las palabras de c1 esta en c2. (4)... ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] regex
El día 27 de enero de 2011 22:14, chakalinux chakali...@gmail.com escribió: Tan mal me explico ? a ver. quería buscar una cadena teniendo en cuenta unos patrones, los patrones pueden variar su orden (a, b, c OR b, c, a OR c, b ,a [...]) peor ya lo he resuelto. Es un programa para el irc que conecta a una base de datos sqlite3 y responde según la pregunta, por ejemplo: pepito: Que es ubuntu? bot: pepito, http://es.wikipedia.org/wiki/Ubuntu La respuesta del bot es automática, en este caso los patrones son: que es ubuntu, si el usuario pepito hubiera preguntado: pepito: ubuntu ... y eso que es ? linux_boy: creo que ubuntu es la mejor distro para empezar bot: linux_boy, http://es.wikipedia.org/wiki/Ubuntu linux_boy: tiovivo, con ubuntu no pasaría tiovivo: eso que es? linux_boy: tiovivo, mira en http://es.wikipedia.org/wiki/Ubuntu El algoritmo que propones va a fallar con falsos positivos (primer ejemplo) y falsos negativos (segundo ejemplo). La gran ventaja es que es muy simple. Si te interesa el tema del procesamiento del lenguaje natural puedes echarle un vistazo al libro del nltk: http://www.nltk.org/book Para implementar tu algoritmo yo usaría sets. Es facil con ellas ver si un conjunto de palabras (ubuntu, que, es) está contenido en el conjunto de palabras del mensaje de IRC. Saludos: Javi ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/