Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
script:python:new:snippets [2011/11/26 11:33] alfred |
script:python:new:snippets [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 83: | Línea 83: | ||
| urllib2.install_opener(opener) | urllib2.install_opener(opener) | ||
| xml = urllib2.urlopen('https://api.del.icio.us/v1/posts/recent').read() | xml = urllib2.urlopen('https://api.del.icio.us/v1/posts/recent').read() | ||
| + | </code> | ||
| + | ==== Detectar el final de la ejecución ==== | ||
| + | === Utilizar atexit === | ||
| + | ''atexit'' permite indicar una función que se llamará al finalizar la ejecución: | ||
| + | <code python> | ||
| + | import atexit | ||
| + | def all_done(): | ||
| + | print 'all_done()' | ||
| + | print 'Registering' | ||
| + | atexit.register(all_done) | ||
| + | print 'Registered' | ||
| </code> | </code> | ||
| + | Este código dará como resultado: | ||
| + | <code> | ||
| + | Registering | ||
| + | Registered | ||
| + | all_done() | ||
| + | </code> | ||
| + | |||
| + | Podemos pasar parámetros: | ||
| + | <code python> | ||
| + | import atexit | ||
| + | def my_cleanup(name): | ||
| + | print 'my_cleanup(%s)' % name | ||
| + | atexit.register(my_cleanup, 'first') | ||
| + | atexit.register(my_cleanup, 'second') | ||
| + | atexit.register(my_cleanup, 'third') | ||
| + | </code> | ||
| + | |||
| + | === Detectar un CTRL+C === | ||
| + | Se ha de detectar la ''KeyboardInterrup'': | ||
| + | <code python> | ||
| + | try: | ||
| + | start_thread() | ||
| + | except (KeyboardInterrupt, SystemExit): | ||
| + | cleanup_stop_thread(); | ||
| + | sys.exit() | ||
| + | </code> | ||
| + | ==== Conocer las direcciones de la máquina ==== | ||
| + | Para UNIX existe el paquete ''netifaces'': | ||
| + | <code python> | ||
| + | from netifaces import interfaces, ifaddresses, AF_INET | ||
| + | for ifaceName in interfaces(): | ||
| + | addresses = [i['addr'] for i in ifaddresses(ifaceName).setdefault(AF_INET, [{'addr':'No IP addr'}] )] | ||
| + | print '%s: %s' % (ifaceName, ', '.join(addresses)) | ||
| + | </code> | ||
| + | Derivado de este código cómo conseguir una ip pública: | ||
| + | <code python> | ||
| + | from netifaces import interfaces, ifaddresses, AF_INET | ||
| + | for ifaceName in interfaces(): | ||
| + | for i in ifaddresses(ifaceName).setdefault(AF_INET, [{'addr':'127.'}] ): | ||
| + | if not i['addr'].startswith("127."): | ||
| + | return i['addr'] | ||
| + | </code> | ||
| ===== Tips ===== | ===== Tips ===== | ||
| * Para configuración podemos agregar un fichero settings.py al proyecto. Este contendría un diccionario con las configuración deseada (par: clave, valor). | * Para configuración podemos agregar un fichero settings.py al proyecto. Este contendría un diccionario con las configuración deseada (par: clave, valor). | ||
| + | * Puedes ejecutar un módulo cual si fuese un programa haciendo ''python -m modulo''. Por ejemplo, si quisiesemos abrir un servidor web en el directorio actual: | ||
| + | <code> | ||
| + | $ python -m SimpleHTTPServer | ||
| + | $ python -m SimpleHTTPServer 8080 | ||
| + | $ python -m http.server | ||
| + | </code> | ||
| ===== Snippets ===== | ===== Snippets ===== | ||
| <code python> | <code python> | ||
| print map(int, "10 20 30".split()) # [10, 20, 30] | print map(int, "10 20 30".split()) # [10, 20, 30] | ||
| + | </code> | ||
| + | <code python> | ||
| d = [1, 3, 5] | d = [1, 3, 5] | ||
| d[-1] # 5 | d[-1] # 5 | ||
| + | </code> | ||
| + | <code python> | ||
| + | winners = set('''washington adams jefferson jefferson madison madison | ||
| + | monroe monroe adams jackson jackson vanburen harrison polk taylor pierce buchanan'''.split()) | ||
| + | </code> | ||
| + | <code python> | ||
| + | def __init__(self, email, content, created=None): | ||
| + | self.email = email | ||
| + | self.content = content | ||
| + | self.created = created or datetime.datetime.now() | ||
| + | # if created has value self.created will take it, if not self.created will be datetime.now() | ||
| + | </code> | ||
| + | ==== zip function ==== | ||
| + | <code> | ||
| + | >>> a = ['a', 'b', 'c'] | ||
| + | >>> c = [10, 33, 44] | ||
| + | >>> zip(a, c) | ||
| + | [('a', 10), ('b', 33), ('c', 44)] | ||
| + | >>> dict(zip(a, c)) | ||
| + | {'a': 10, 'c': 44, 'b': 33} | ||
| </code> | </code> | ||