Re: [Python-es] ¿Como cierro correctamente un hilo-servidor de sockets?

2011-08-26 Por tema chakalinux
En la interrupcion KeyboardInterrupt tienes que cerrar los hilos para que no
se te quede el mismo en CLOSE_WAIT que en ciertos casos puede durar bastante
en liberarse.

De todas maneras yo te recomiendo que uses la librería select o asyncore
para manejar socket's, intenta evitar cuando puedas sockets y threading

El 26 de agosto de 2011 02:21, Sergio Martín escribió:

> Comentar que aunque añada la línea:
>self.socketserver.close()
> en el método close() de la clase TelnetServer el resultado es el mismo.
>
> El día 26 de agosto de 2011 02:17, Sergio Martín
>  escribió:
> > Tengo un script en el que, primero, ejecuto un servidor de sockets en
> > un hilo, y cada conexión que reciba, genera su propio hilo.
> > El problema viene cuando intento salirme del programa mediante una
> > excepción KeyboardInterrupt controlada, funciona bien si no ha habido
> > ninguna conexión al socket-servidor, pero si me salgo del programa una
> > vez que he recibido alguna conexión, y, a continuación ejecuto el
> > programa de nuevo, me sale un "socket.error: [Errno 48] Address
> > already in use", como si no hubiese cerrado el socket del servidor
> > correctamente, teniéndome que esperar un rato hasta que se libere el
> > puerto.
> > Tengo controladas dos situaciones una que desde el cliente telnet se
> > pase el comando "quit", con lo que cierro el socket del cliente, y
> > otra cuando se pierde la conexión con el cliente sin introducir el
> > comando "quit"
> > El error solo me lo lanza cuando he salido por medio del "quit".
> >
> > Aviso que está escrito en python3, y se que hay mejores formas de
> > hacer esto en vez de usar hilos, como el módulo twisted (sin
> > compatibilidad python3) o el asyncore, pero solo tengo planeado
> > recibir un par de conexiones simultáneas por lo que no se generarán
> > muchos hilos.
> >
> > Pongo una versión simplificada del programa, con solo lo básico para
> > ilustrar el problema:
> >
> > #! /usr/bin/env python3
> >
> > import threading
> > import socket
> > import sys
> > import time
> >
> > class TelnetServer(threading.Thread):
> >
> >def __init__(self):
> >threading.Thread.__init__(self)
> >self.socketserver = socket.socket()
> >self.socketserver.bind(('', ))
> >self.socketserver.listen(5)
> >
> >def run(self):
> >print('Servidor en marcha')
> >while True:
> >socketclient, addr = self.socketserver.accept()
> >client = TelnetClient(socketclient, addr)
> >client.start()
> >
> >def close(self):
> >print('Servidor detenido')
> >
> > class TelnetClient(threading.Thread):
> >
> >def __init__(self, socketclient, addr):
> >threading.Thread.__init__(self)
> >self.socketclient = socketclient
> >self.addr = addr
> >
> >def run(self):
> >print('Conexión: %s:%s' % (self.addr[0], self.addr[1]))
> >while True:
> >try:
> >command, args = self.prompt()
> >except socket.error:
> >self.close()
> >break
> >
> >if command == None:
> >pass
> >elif command == 'quit':
> >self.close()
> >break
> >else:
> >self.send('Comando desconocido\n')
> >
> >def send(self, msg):
> >self.socketclient.send(msg.encode('utf8'))
> >
> >def recv(self):
> >return self.socketclient.recv(1024).decode('utf8')[:-2]
> >
> >def prompt(self):
> >try:
> >self.send('prompt> ')
> >recv_list = self.recv().split()
> >return recv_list[0].lower(), recv_list[1:]
> >except IndexError:
> >return None, []
> >
> >def close(self):
> >self.socketclient.close()
> >print('Desconexión: %s:%s' % (self.addr[0], self.addr[1]))
> >
> > if __name__ == '__main__':
> >try:
> >telnetserver = TelnetServer()
> >telnetserver.daemon = True
> >telnetserver.start()
> >
> >while True:
> >time.sleep(100)
> >
> >except KeyboardInterrupt:
> >telnetserver.close()
> >sys.exit()
> >
> ___
> 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/


[Python-es] Crear scripts como demonios

2011-11-20 Por tema chakalinux
Hola lista,

Intento crear un demonio de un Script sockets en python que debe permanecer
aunque cierre la shell, el caso que leyendo la documentación del modulo
daemon veo lo siguiente:

from spam import do_main_program


El caso que dicho módulo spam no lo encuentro por ningún lado, uso Ubuntu
11.10 y no veo nada.
___
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] Crear scripts como demonios

2011-11-21 Por tema chakalinux
Al final lo deje con un simple fork añadiendo an principio eso:

import os, sys

pid = os.fork()
if pid > 0:
sys.exit(0)

Gracias por responder :)

El 21 de noviembre de 2011 08:16, Jesús Espino escribió:

> Otra opción, aunque con un enfoque distinto seria usar "supervisor",
> que es un programa python que sirve para tener servicios levantados.
>
> Un saludo.
>
> 2011/11/21 Daπid :
> > 2011/11/20 chakalinux :
> >> from spam import do_main_program
> >>
> >> El caso que dicho módulo spam no lo encuentro por ningún lado,
> >
> > Jeje, has caído en un chiste.
> >
> > En  la documentación de Python, como nombres de relleno (variables
> > cualesquiera, strings arbitrarias, etc.) se usan términos sacados de
> > los Monty Pythons, como eggs, bacon, spam, knights_who_say_ni...
> >
> > En tu caso, eso significa que tienes que tener un archivo llamado
> > spam.py, con el programa encapsulado en la función do_main_program.
> >
> >
> > Si no quieres tener dos archivos, probablemente (no lo he probado, no
> > soy experto, estoy especulando mucho), puedas escribirlo todo dentro
> > del bloque with daemon.DaemonContext():
> > ___
> > 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/
>
___
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] Script como demonio

2011-11-22 Por tema chakalinux
A ver, tengo un script que se conecta al iRC obviamente mediante sockets y
este hace un os.fork() para mantenerlo abierto cuando cierro la shell, el
caso que es curioso ya que cuando lo ejecuto la shell me devuelve
correctamente el promt:

shell:~$ ./Script.py
shell:~$

Hasta ahí correcto, funciona, el tema y la curiosidad es cuando cierro la
shell sigue funcionando pero dicho script abre un archivo (f =
file("archivo")), pues bien, parece que cuando cierro la shell no encuentra
el archivo, en el momento que entro a la shell de nuevo el archivo lo
localiza manteniendo el script ejecutado en "2 plano". ¿ Por que pasa esto
?.

Para hacernos una idea tengo +/- esto:

import ...

pid = os.fork()
if pid > 0:
sys.exit(0)

[...]

f = file("archivo.log")
for line in f.readlines()
[]
___
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] Script como demonio

2011-11-22 Por tema chakalinux
eso pense yo, pero por que si encuentra el archivo cuando mantengo la shell
? :)

probe a añadir lo siguiente despues del fork:

os.chdir('/')

Pero nada, el archivo a abrir es una ruta absoluta del tipo:
/home/user/logs/archivo.log, no lo entiendo mmm


El 22 de noviembre de 2011 14:38, Carlos Herrera Polo <
carlos.herrerap...@gmail.com> escribió:

> Posiblemente sea un asunto de rutas y tener que indicar el path del
> archivo
>
> El 22/11/11, chakalinux  escribió:
> > A ver, tengo un script que se conecta al iRC obviamente mediante sockets
> y
> > este hace un os.fork() para mantenerlo abierto cuando cierro la shell, el
> > caso que es curioso ya que cuando lo ejecuto la shell me devuelve
> > correctamente el promt:
> >
> > shell:~$ ./Script.py
> > shell:~$
> >
> > Hasta ahí correcto, funciona, el tema y la curiosidad es cuando cierro la
> > shell sigue funcionando pero dicho script abre un archivo (f =
> > file("archivo")), pues bien, parece que cuando cierro la shell no
> encuentra
> > el archivo, en el momento que entro a la shell de nuevo el archivo lo
> > localiza manteniendo el script ejecutado en "2 plano". ¿ Por que pasa
> esto
> > ?.
> >
> > Para hacernos una idea tengo +/- esto:
> >
> > import ...
> >
> > pid = os.fork()
> > if pid > 0:
> > sys.exit(0)
> >
> > [...]
> >
> > f = file("archivo.log")
> > for line in f.readlines()
> > []
> >
>
> --
> Enviado desde mi dispositivo móvil
> ___
> 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] Script como demonio

2011-11-22 Por tema chakalinux
Si, y no pilla la ruta como si no existiera:

Traceback (most recent call last):
  File "./X.py", line 49, in 
os.chdir("/home/redirc/services/logs")
OSError: [Errno 2] No such file or directory: '/home/redirc/services/logs'

shell:~$ ls /home/redirc/services/logs
services.log.20110814  services.log.2014  services.log.2017
services.log.2020
services.log.2012  services.log.2015  services.log.2018
services.log.2021
services.log.2013  services.log.2016  services.log.2019
services.log.2022


NO lo entiendo ...

El 22 de noviembre de 2011 15:43, Carlos Herrera Polo <
carlos.herrerap...@gmail.com> escribió:

> Para descartar...
>
> Has probado abriendo el archivo con la ruta completa a ver si lo hace
> desde el servicio ?
>
> f = file("/home/user/logs/archivo.log")
>
> El 22 de noviembre de 2011 09:06, chakalinux escribió:
>
> eso pense yo, pero por que si encuentra el archivo cuando mantengo la
>> shell ? :)
>>
>> probe a añadir lo siguiente despues del fork:
>>
>> os.chdir('/')
>>
>> Pero nada, el archivo a abrir es una ruta absoluta del tipo:
>> /home/user/logs/archivo.log, no lo entiendo mmm
>>
>>
>> El 22 de noviembre de 2011 14:38, Carlos Herrera Polo <
>> carlos.herrerap...@gmail.com> escribió:
>>
>>> Posiblemente sea un asunto de rutas y tener que indicar el path del
>>> archivo
>>>
>>> El 22/11/11, chakalinux  escribió:
>>> > A ver, tengo un script que se conecta al iRC obviamente mediante
>>> sockets y
>>> > este hace un os.fork() para mantenerlo abierto cuando cierro la shell,
>>> el
>>> > caso que es curioso ya que cuando lo ejecuto la shell me devuelve
>>> > correctamente el promt:
>>> >
>>> > shell:~$ ./Script.py
>>> > shell:~$
>>> >
>>> > Hasta ahí correcto, funciona, el tema y la curiosidad es cuando cierro
>>> la
>>> > shell sigue funcionando pero dicho script abre un archivo (f =
>>> > file("archivo")), pues bien, parece que cuando cierro la shell no
>>> encuentra
>>> > el archivo, en el momento que entro a la shell de nuevo el archivo lo
>>> > localiza manteniendo el script ejecutado en "2 plano". ¿ Por que pasa
>>> esto
>>> > ?.
>>> >
>>> > Para hacernos una idea tengo +/- esto:
>>> >
>>> > import ...
>>> >
>>> > pid = os.fork()
>>> > if pid > 0:
>>> > sys.exit(0)
>>> >
>>> > [...]
>>> >
>>> > f = file("archivo.log")
>>> > for line in f.readlines()
>>> > []
>>> >
>>>
>>> --
>>> Enviado desde mi dispositivo móvil
>>> ___
>>> 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/
>>
>>
>
> ___
> 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] Script como demonio

2011-11-22 Por tema chakalinux
No ahí links, son archivos simples, el tema que no veo como resolverlo, el
tema es cuando se re realiza la llamada a fork() y sales de la shell, el
archivo sigue ejecutandose y funciona todo menos cuando desde la aplicación
que en este caso es un cliente iRC intento leer el log, me dice que no
existe, en cuanto entro a la shell remota lo encuentra por arte de magia
sin tocar nada :)

El 22 de noviembre de 2011 16:44, Jose Caballero
escribió:

> Tienes links?
> He buscado rapido en google "os.chdir fail" y los primeros enlaces hablan
> de problemas potenciales cuando el path incluye links.
>
> ___
> 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] Script como demonio

2011-11-22 Por tema chakalinux
Ya lo he conseguido, creo que el problema estaba al usar la librería blob
para listar los archivos que ahí en un directorio, en su ausencia uso
os.popen("ls %s" % path), es curioso pero quitandolo ahora si "lee" el
archivo fuera de la shell

antes tenia esto:

[...]
from glob import glob

for archive in glob("%s/*" % path):
if not os.path.isfile(archive):
continue
f = open(archive)
for line in f.readlines():
if search.rstrip().lower() in line.lower():
lines.append(line.rstrip('\n'))
i += 1
f.close()
[...]

Por esto (funciona):

[...]
for archive in os.popen("ls %s" % dirlog).readlines():
if not os.path.isfile("%s%s" % (dirlog, archive.rstrip("\n"))):
continue
f = open("%s%s" % (dirlog, archive.rstrip("\n")))
for line in f.readlines():
if search.rstrip().lower() in line.lower():
lines.append(line.rstrip('\n'))
i += 1
f.close()
[...]

Un saludo

El 22 de noviembre de 2011 17:34, Oswaldo  escribió:

> El 22/11/2011 16:58, chakalinux escribió:
>
>  No ahí links, son archivos simples, el tema que no veo como resolverlo,
>> el tema es cuando se re realiza la llamada a fork() y sales de la shell,
>> el archivo sigue ejecutandose y funciona todo menos cuando desde la
>> aplicación que en este caso es un cliente iRC intento leer el log, me
>> dice que no existe, en cuanto entro a la shell remota lo encuentra por
>> arte de magia sin tocar nada :)
>>
>>
> Haz un ejemplo los mas simple posible, pero en el que se reproduzca el
> problema y envialo en un archivo adjunto a la lista para que podamos
> comprobar.
>
>
> --
> Oswaldo
>
> __**_
> Python-es mailing list
> Python-es@python.org
> http://mail.python.org/**mailman/listinfo/python-es<http://mail.python.org/mailman/listinfo/python-es>
> FAQ: http://python-es-faq.wikidot.**com/<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] Crear scripts como demonios

2011-12-02 Por tema Chakalinux
Una pagina muy interesante ..., gracias

Enviado desde mi iPhone

El 30/11/2011, a las 16:36, Gerardo Diez  
escribió:

> El día 28 de noviembre de 2011 00:24, Angel Claudio Alvarez
>  escribió:
>> El sáb, 26-11-2011 a las 00:56 -0200, Carlos Do Carmo escribió:
>>> El 20/11/2011 12:40, chakalinux escribió:
>>>> Hola lista,
>>>> 
>>>> Intento crear un demonio de un Script sockets en python que debe
>>>> permanecer aunque cierre la shell, el caso que leyendo la
>>>> documentación del modulo daemon veo lo siguiente:
>>>> 
>>>> from spam import do_main_program
>>>> 
>>>> El caso que dicho módulo spam no lo encuentro por ningún lado, uso
>>>> Ubuntu 11.10 y no veo nada.
>>>> 
>>>> 
>>>> ___
>>>> Python-es mailing list
>>>> Python-es@python.org
>>>> http://mail.python.org/mailman/listinfo/python-es
>>>> FAQ: http://python-es-faq.wikidot.com/
>>> Estimado.
>>> 
>>> En mi caso tengo echo un script que se conecta a una interfaz que
>>> controla los surtidores de una estacion de servicio, este script esta en
>>> ejecucion desde que arranca el sistema para esto hago lo siguiente
>>> 
>>> Edite el archivo
>>> /etc/rc.local
>>> 
>>> y le coloque la ruta de donde esta el script vale aclarar que el script
>>> debe tener permiso de ejecucion, dentro del archivo /etc/rc.local tengo
>>> lo siguiente
>>> 
>>> nohup python /usr/local/bin/conexionSurtidor.py > /home/usuario/log1.txt &
>>> 
>>> 
>> Tambien lo puede hacer de la forma correcta:
>> cerrar stdin stdout y stderr, pasar a / y hacer depender el daemon de
>> init
>> 
>> 
>>> Espero que te sea de utilidad.
>>> 
>>> Saludos.
>>> 
> 
> Proviene de otra lista. Igual es interesante revisar estos enlaces:
> http://econcept.es/python-daemon
> https://bitbucket.org/jsabater/python-daemon/wiki/Home
>>> 
>>> ___
>>> 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/
> ___
> 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] Tratar datos txt entre filas

2013-01-18 Por tema chakalinux
Por que no usas la función *map* ? precisamente hace eso, "compara" 2
listas y retorna según una condición, ejemplo:

def Compara(x, y):
if x > 100:
return x

l1 = (1,2,3,4,5,6, 100, 101)
l2 = (1,2,3,0,0,6, 99, 100)

filtro = map(Compara, l1, l2)

print filtro
[None, None, None, None, None, None, None, 101]

Un saludo


El 17 de enero de 2013 10:46, Carlos Agulló Calvo escribió:

> hola
>
> Hace ya tiempo pregunté varias dudas sobre el tratamiento de datos que
> están en un .txt desde entonces, he conseguido varios progresos, pero ahora
> me he quedado estancado en un punto del que no se salir.
>
> Mi duda consiste en lo siguiente:
>
> tengo los datos de la siguiente manera:
>
> "0303201";1/4/2009
> 0:01:00;2;0;0;0;0;117;44;163;2;0;0;0;-127;2;-127;-127;-127;-127;0
> "0303201";1/4/2009
> 0:02:00;2;1;0;0;0;104;92;255;1;0;1;1;-127;1;-127;-127;-127;-127;0
> (Es un extracto)
>
> y querría poder compararlos entre las filas para aplicar una serie de
> filtros y en función de si cumplen o no los filtros que vayan a archivos
> separados.
>
> He pensado que debería hacer que cada fila fuera una lista y por eso he
> hecho este programa:
>
> leer=open("datos.txt","r")
> lista=open("datos_lista.txt","a")
> validos=open("est_0303201_VAL.txt","a")
> no_validos=open("est_0303201_ERR.txt","a")
>
> for i in leer.readlines():  #con esto lee cada línea
> datos=i.strip().split(";")  #guarda cada linea como una lista
> lista.write(str(datos)+"\n")  #escribe en VALIDOS (datos_lista.txt)
> las lineas como listas [,]
>
>
>
> leer.close()
> validos.close()
>
> que me crea 2 archivos vacíos y uno con los datos en forma de listas así:
>
> ['"0303201"', '1/4/2005 0:01:00', *'2', '0'*, '0', '0', '0', '143',
> '-127', '-127', '2', '0', '0', '0', '-127', '2', '-127', '-127', '-127',
> '-127', '0']
> ['"0303201"', '1/4/2005 0:02:00', *'0', '100'*, '0', '0', '0', '106',
> '-127', '-127', '1', '0', '1', '1', '-127', '1', '-127', '-127', '-127',
> '-127', '0']
> (es un extracto)
>
> El problema es que no sé cómo poner los filtros.
>
> Por ejemplo, quiero que si  la columna en negrita 1 es cero y la columna
> en negrita 2 es 100 se considere error.
>
> o que en el siguiente ejemplo:
>
> ['"0303201"', '1/4/2005 0:01:00', '2', '0', '0', '0', '0', *'143'*,
> '-127', '-127', '2', '0', '0', '0', '-127', '2', '-127', '-127', '-127',
> '-127', '0']
> ['"0303201"', '1/4/2005 0:02:00', '0', '100', '0', '0', '0', *'106'*,
> '-127', '-127', '1', '0', '1', '1', '-127', '1', '-127', '-127', '-127',
> '-127', '0']
> (es un extracto)
>
> si en la fila 2 la columna en negrita es menor que en la fila 1 también de
> error.
>
> (luego pondría yo que me diga el filtro que no cumple, pero eso creo que
> lo sé hacer).
>
> ¿Podríais ayudarme?
>
> Muchas gracias
>
>
> ___
> 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/


[Python-es] py2exe en ubuntu

2010-12-17 Por tema chakalinux
Hola, intento instalar py2exe y no lo he logrado, me baje py2exe-0.6.9 de
sourceforge y al intentar instalarlo me dice que no encuentra la librería
windows.h, por mas que busco no la encuentro:

Me sale lo siguiente:

python setup.py install ->

/home/c/Descargas/py2exe-0.6.9/py2exe/build_exe.py:16: DeprecationWarning:
the sets module is deprecated
  import sets
running install
running build
running build_py
running build_ext
building '_memimporter' extension
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall
-Wstrict-prototypes -fPIC -DPYTHONDLL=\"PYTHON26.DLL\"
-DPYTHONCOM=\"pythoncom26.dll\" -I/usr/include/python2.6 -c
source/MemoryModule.c -o build/temp.linux-x86_64-2.6/source/MemoryModule.o
:0: warning: missing terminating " character
:0: warning: missing terminating " character
source/MemoryModule.c:30: warning: ignoring #pragma warning
*source/MemoryModule.c:32: fatal error: Windows.h: No existe el archivo o
directorio*
compilation terminated.
error: command 'gcc' failed with exit status 1


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/


Re: [Python-es] Archivo en uso

2011-01-13 Por tema chakalinux
si no te deja sobreescribirlo puedes usar *inuse.exe* que te va* *permitir
la sustitución de archivos que estén en uso por parte del Sistema Operativo
y que de otra manera no podrían ser sustituidos

El 10 de enero de 2011 21:25, Enrique Nuñez  escribió:

> Estimados:
> Buenas tardes, estoy haciendo un programa de copias de seguridad (a la
> medida) y quisiera saber si es posible determinar que un archivo, en
> particular bajo windows, esta siendo ocupado antes de iniciar su
> respaldo.  Si es posible, agradeceré cualquier referencia.
>
> Atte.
> Enrique Nuñez
> ___
> 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/


[Python-es] regex

2011-01-27 Por tema chakalinux
Hola, intento buscar palabras en una cadena usando regexp, a ver si me
explico, si tengo por ejemplo esta cadena:

cad = u"hola 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: "hola como estan" 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/


Re: [Python-es] regex

2011-01-27 Por tema chakalinux
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  escribió:

> El día 27 de enero de 2011 18:27, chakalinux 
> escribió:
> > Hola, intento buscar palabras en una cadena usando regexp, a ver si me
> > explico, si tengo por ejemplo esta cadena:
> >
> > cad = u"hola 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: "hola como estan" 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

2011-01-27 Por tema chakalinux
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 escribió:

>
>
> El 27 de enero de 2011 12:27, chakalinux  escribió:
>
> Hola, intento buscar palabras en una cadena usando regexp, a ver si me
>> explico, si tengo por ejemplo esta cadena:
>>
>> cad = u"hola 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: "hola como estan" 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

2011-01-29 Por tema chakalinux
gracias ...


El 28 de enero de 2011 17:26, matt ledding  escribió:

> +1 x nltk.org/book ...
>
> sino, por un bot mas sencilla, hay AIML (Artificial Intelligence Markup
> Language), pero sobre todo reversedAIML (http://charlix.sourceforge.net/)que
> tiene otros ideas interesantes.   Puedes crear patrones (ie: "eso que
> es"="que es" antes de substantivo precedente.)
> http://pyaiml.sourceforge.net existe como compilidor de AIML, y
> http://howie.sourceforge.net/ es un opensource AIML chatbot en python si
> quieres ver ideas de codigo.  Todos en inglés, por cierto...
>
> Matt
>
>
>
> 2011/1/27 lasizoillo 
>
> El día 27 de enero de 2011 22:14, chakalinux 
>> 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/
>>
>
>
> ___
> 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/


[Python-es] problemas cadenas unicode

2011-01-31 Por tema chakalinux
Buenas, bueno ... vengo con un problema que llevo arrastrando unos días.
Tengo el siguiente problema, me llega una cadena de texto de retorno
(result) y esta no es unicode pero contiene caracteres acentuados, ñ, etc
...

result = profe.SearchQuestion(message, nickname.split("!")[0])
>
> if result:
> s.send("PRIVMSG %s :%s, %s\r\n" % (channel, nick, result))
>

He probado varias cosas para codificar:


s.send(unicode(("PRIVMSG %s :%s, %s\r\n" % (channel, nick, result
>

o:

if type(txt) not is unicode: txt = txt.decode("utf-8")
>
>> else: txt = txt.decode("iso-8859-15")
>>
>
s.send("PRIVMSG %s :%s, %s\r\n" % (channel, nick, txt))

El caso es que desde mi entorno IDE cuando lo ejecuto no me casca y si lo
ejecuto en un terminal casca con errores tipo:


Traceback (most recent call last):
  File "./irc.py", line 327, in 
Irc()
  File "./irc.py", line 118, in __init__
s.send((unicode("PRIVMSG %s :%s, %s\r\n" % (channel, nick, result
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 61:
ordinal not in range(128)


Parece que desde el terminal trata a las cadenas como ascii ! y no tenia por
que ... vamos, no entiendo como en el IDE funciona y en el terminal no.

Uso pydev como IDE y bash para lanzar el programa. Si sirve de algo en las
cabeceras de cada archivo tengo:


#!/usr/bin/env python
# -*- coding: utf-8 -*-

[...]


y esto por se acaso:


$ locale
LANG=es_ES.utf8
LC_CTYPE="es_ES.utf8"
LC_NUMERIC="es_ES.utf8"
LC_TIME="es_ES.utf8"
LC_COLLATE="es_ES.utf8"
LC_MONETARY="es_ES.utf8"
LC_MESSAGES="es_ES.utf8"
LC_PAPER="es_ES.utf8"
LC_NAME="es_ES.utf8"
LC_ADDRESS="es_ES.utf8"
LC_TELEPHONE="es_ES.utf8"
LC_MEASUREMENT="es_ES.utf8"
LC_IDENTIFICATION="es_ES.utf8"
LC_ALL=


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/


Re: [Python-es] problemas cadenas unicode

2011-02-01 Por tema chakalinux
En principio si, pero al parecer venia codificado y el problema venia desde
el principio cuando recibía datos:


buffer = s.recv(4028).encode('utf-8')

lo deje:
buffer = s.recv(4028)

Y listo, ya funciona en terminal. Lo que me parecía raro que es cuando lo
lanzaba desde pydev no cascaba la codificación y en terminal si, es que el
rollo es que en teoría python ya trabaja según convenga en unicode pero al
trabajar con bases de datos sqlite la cosa cambia.

Un saludo

El 1 de febrero de 2011 09:55, peter  escribió:

> El día 1 de febrero de 2011 00:36, chakalinux 
> escribió:
>
> > Traceback (most recent call last):
> >   File "./irc.py", line 327, in 
> > Irc()
> >   File "./irc.py", line 118, in __init__
> > s.send((unicode("PRIVMSG %s :%s, %s\r\n" % (channel, nick, result
> > UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 61:
> > ordinal not in range(128)
>
>
> ¿Te das cuenta de que intentabas enviar unicode sin codificar?  Y
> python te lo codifica como ascii, claro.
> Codifícalo explícitamente  (con la codificación que use esa red de irc)
> ___
> 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/


[Python-es] Bot irc modular

2011-02-04 Por tema chakalinux
Hola de nuevo :)

Miren, me estoy comiendo la,cabeza para hacer un bot/cliente IRC modular, me
explico. Quiero partir de una librería irc que ya la tengo pero no se como
implementarlo para que la aplicación se pueda extender fácilmente, en xchat
el programa esta conectado al IRC y para cargar una extensión por ejemplo de
python se usa:

/py load modulo.py

modulo.py tiene en su cabezera entre otras:

import xchat


En mi caso no se como hacerlo, estoy encaminado por algo así:

##
botlib.py
##

class Bot():
def __init__(self):
self.nick = "pepito"
self.nickpassword = ""
self.username = os.getenv("USERNAME")
self.hostname = os.getenv("HOSTNAME")
self.realname = os.getenv("USERNAME")
self.server = "irc-hispano.org"
self.port = 6667
[...]

def run(self):
self.s = socket.socket()
[...]

dev RecvMsg(self):
# Aqui cojo nick, canal, mensaje, ...
return nick, channel, message

##

y ahora si quiero hacer un modulo para que haga "algo" el bot la cosa sería:

import bot

class Seen(bot.Bot):
def __init__(self):
self.nick = "yo"
[...]

def run(self):
datos = self.recv(self.nick, self.name, self.data)
print datos

seen = Seen()
seen.run()


Total, no se como cogerlo :), la idea es fácil en principio, cargar la
librería y la usas pero no se como enlazar en el caso anterior el evento
RecvMsg() con un modulo externo y es un poco coñazo hacerlo con clases, no
se si hay alguna manera mejor y mas limpia.

EL problema que tiene el anterior ejemplo sin duda es que al instanciar la
clase Bot() se ejecutan 2 conexiones simultaneas y claro ... no es lo que se
quiere, un ejemplo para este caso es xchat, carga los plugins si se
encuentran en X directorio y si instancio o llama a una librería que solo
contiene funciones no se como hacer en el modulo para que cuando le diga:
"Darme datos si los recibes" me los de ... jajajja perdonad si me explico
mal, si supiera explicar el problema no lo preguntaría.

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/