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/24 15:00] alfred |
script:python:new:snippets [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 49: | Línea 49: | ||
| subprocess.getoutput(cmd) | subprocess.getoutput(cmd) | ||
| </code> | </code> | ||
| + | |||
| ==== Llamar webservices REST ==== | ==== Llamar webservices REST ==== | ||
| + | === Llamada simple === | ||
| + | <code python> | ||
| + | import urllib | ||
| + | data = urllib.urlopen(url).read() | ||
| + | </code> | ||
| + | === Llamada pasando parámetros POST === | ||
| + | <code python> | ||
| + | import urllib | ||
| + | url = 'http://xxxxxxxxxxxxx' | ||
| + | params = urllib.urlencode({ | ||
| + | 'appid': appid, | ||
| + | 'context': context, | ||
| + | 'query': query | ||
| + | }) | ||
| + | data = urllib.urlopen(url, params).read() | ||
| + | </code> | ||
| + | === Llamada con autentificación === | ||
| + | <code python> | ||
| + | import urllib2 | ||
| + | |||
| + | delicious_user = 'Your del.icio.us username' | ||
| + | delicious_pass = 'Your del.icio.us password' | ||
| + | |||
| + | password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm() | ||
| + | password_manager.add_password( | ||
| + | None, 'https://api.del.icio.us/', delicious_user, delicious_pass | ||
| + | ) | ||
| + | auth_handler = urllib2.HTTPBasicAuthHandler(password_manager) | ||
| + | opener = urllib2.build_opener(auth_handler) | ||
| + | urllib2.install_opener(opener) | ||
| + | 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> | ||
| + | |||
| + | 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 ===== | ||
| + | <code python> | ||
| + | print map(int, "10 20 30".split()) # [10, 20, 30] | ||
| + | </code> | ||
| + | <code python> | ||
| + | d = [1, 3, 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> | ||