Página 1 de 1

[Guia] Iniciando en Python

Publicado: 16 Sep 2015, 23:25
por Doddy
[Guia] Iniciando en Python
[Autor] Doddy Hackman

-- == Indice == --

0x00 : Presentacion
0x01 : Que es Python
0x02 : Tipos basicos
0x03 : Uso de print
0x04 : Tipos de condiciones
0x05 : Colecciones
0x06 : Manejo de errores
0x07 : Variables argumentales
0x08 : Concatenacion
0x09 : Comentarios
0x10 : Entradas de teclado
0x11 : Manejo de split
0x12 : Funciones
0x13 : Listar directorios y manejo de archivos
0x14 : Manejo de sockets
0x15 : Interactuar con webs y expresiones regulares
0x16 : Descarga de archivos
0x17 : Manejo de funciones
0x18 : Creacion de un keylogger
0x19 : Compresion de archivos
0x20 : Mostrar y ocultar archivos en Windows
0x21 : Manejo de threads
0x22 : Compilar script a exe
0x23 : Bibliografia

-- =========== --


0x00 : Presentacion


Hola , aca les traigo una guia para iniciarnos en python.

Cualquier sugerencia o error en la guia deben decirmelo para mejorar.


0x01 : Que es Python


Segun wiki python es

Python es un lenguaje de programación de alto nivel cuya filosofía hace hincapié en una sintaxis muy limpia y que favorezca un código legible.
Se trata de un lenguaje de programación multiparadigma ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico, es fuertemente tipado y multiplataforma.
Es administrado por la Python Software Foundation. Posee una licencia de código abierto, denominada Python Software Foundation License,1 que es compatible con la Licencia pública general de GNU a partir de la versión 2.1.1, e incompatible en ciertas versiones anteriores.
En lo personal considero que python es el lenguaje indicado para empezar a programar , tiene un gran poder en todos sentidos y
es facil de aprender a usarlo.

Para cargar un script en python , tenemos que cargar la consola ms dos , usar cd para entrar al directorio donde esta el script y teclear el nombre del script , puede ser
algo asi
test.py
Y se carga...

Para bajar python 2.5 puden ir al siguiente enlace
http://www.python.org/ftp/python/2.5.2/python-2.5.2.msi
Aclaracion : si queremos crear un script py tenemos que hacerlo con bloc de notas cuando ya escribimos el codigo tenemos que
ir "guardar como" , donde dice nombre ponemos "script.py" y en tipo ponemos "todos los archivos"

0x02 : Tipos basicos


Los tipos basicos en python son los siguientes :


-- == Numeros == --

Los numeros pueden ser enteros,de coma flotante y complejos

Un ejemplo de cada uno serian :
entero = 4
coma = 12.50
complejos = 8 + 4j
-- == Cadenas de texto == --

Las cadenas son solo texto puesto entre comillas simples o dobles.

Podemos declararlas con comillas dobles de la siguiente manera
nombre = "hola"
O con comillas simples
nombre = 'hola'
-- == Booleanos == --


Las variables de tipo booleano solo pueden tener dos valores , los cuales son "True" o "False"
Estas valores son importantes para las condiciones y los bucles

Un ejemplo de como usar esta variable seria
acccion = True
accionmala = False
Aclaracion : cuando se declara una variable primero se pone el nombre de la variable para despues
poner un = , despues del igual va a valor correspondiente a la variable.

0x03 : Uso de print

Ok , ahora vamos a conocer a print,esta hermosa funcion que nos ayudara a mostrar texto en pantalla
Podemos mostrar el text entre comillas dobles o simples

Un ejemplo de como usar print en texto normal seria asi :

Con comillas dobles
print "hola"
Comillas simples
print 'hola'
Como ven mostramos el texto que esta entre comillas , nunca debemos dejar una comilla sin cerrar
de lo contrario el codigo dara error.

Tambien podemos mostrar el contenido de las variables usando print de la siguiente forma

Usando una coma

Con comillas dobles
valor = "mundo"
print "hola ",valor, " asqueroso"
Con comillas simples
valor = "mundo"
print 'hola ',valor,' asqueroso'
Usando un mas


Con comillas dobles
valor = "mundo"
print "hola "+valor+" asqueroso"
Con comillas simples
valor = "mundo"
print 'hola '+valor+' asqueroso'

0x04 : Tipos de condiciones


Bien los tipos de condiciones usados en python son los siguientes :

-- == if-elif-else == --

Clasico en cualquier lenguaje de programacion
if "test"=="test":
 print "bien"
Tambien podemos usar if para verificar que tal cosa no sea asi simplemente poniendo un not al lado de la condicion de la siguiente
manera
if not "test"=="test":
 print "bien"
O podemos hacer asi para verificar que test no sea igual a test
if "test"!="test":
 print "no es"
Como ven controlamos que test sea igual a test , despues usamos : para marcar la condicion , si el if funciona se deja un espacio que indica que lo que el if hara si funciona
Si no dejamos ese espacio el codigo dara error con razon , si queremos usar un else con el if podemos hacer asi
if "test"=="test":
 print "bien"
else:
 print "mal"
Como ven coordinamos los espacios entre el if y el else , else sirve para realizar una funcion por si el if no da positivo

Tambien podemos usar elif para tener varias condiciones de la siguiente manera
if "test"=="te":
 print "bien"
elif "test"=="tes":
 print "bien"
elif "test"=="test":
 print "al fin"
else:
 print "nada encontrado"

-- == for == --

Bien , ahora veremos como funciona for , esta funcion sirve para ayudarnos a realizar una tarea por la veces
que queramos

Podemos usar for para realizar un conteo del uno al diez de la siguiente forma
for number in range(1,10):
 print number
Com ven usamos for para llamar a la funcion , despues ponemos el valor number que nos ayudar a declarar el resultado
del rango 1 al 10
Despues ponemos in range para aclarar el rango que vamos a usar , el rango va encerrado entre parantesis , siempre tenemos
que cerrarlo de lo contrario dara error.
Despues ponemos un : para cerrar la condicion , despues de el : dejamos un espacio para poder indicar que hara el script cuando el
for comienze a hacer lo suyo.

-- == while == --

Bien , ahora llegamos a la funcion que nos ayuda a realizar bucles , while sirve para que se ejecuta una cosa mientras el valor
aclarado en el while sea positivo

Un ejemplo seria controlando que 1 sea igual a 1
while 1==1:
 print "hola"
Como ven un maldito bucle infinito


0x05 : Colecciones


Bien , ahora pasamos a los tipos de colecciones , los tipos de colecciones que tiene python
son los siguientes :


-- == Listas == --

Para crear una lista podemos hacer asi
listas = ["tengo","tengo","hola"]
Como ven primero ponemos el nombre de la lista , despues ponemos un igual para marcar los valores de
la lista , los cuales deben estar encerrados entre corchetes , nombrados por comillas simples o dobles separados
por una coma

Si queremos abrir una lista podemos usar for de la siguiente forma
for list in lista:
 print list
Como ven usamos for para abrir una lista e ir mostrando los valores de la lista con la variable list

Para borrar repetidos en una lista podemos hacer esto
listas = ["tengo","tengo","hola"]
limpia = []
for fa in listas:
 if fa not in limpia:
  limpia.append(fa)

print limpia
Como ven tenemos la lista "listas" con el contenido repetido varias veces , paro eso se crea una lista
nueva , la cual abre la lista "listas" para añadir dichos valores a la nueva lista llamada "limpia" , entonces si dicho valor
ya existe en la lista limpia se lo ignora quedando asi una nueva lista "limpia"

Aclaracion : append se encarga de agregar valores a la lista

O asi
listas = ["tengo","tengo","hola"]

limpia = set(listas)

for l in limpia:
 print l


Como ven , tenemos la misma lista con los valores repetidos entonces lo que hacemos es usar
la funcion set() con la lista "listas" , entonces el resultado de dicha funcion se almacena en una
nueva lista con el valor de "limpia"

Finalmente mostramos los valores de la lista limpia con un for.


Para agregar mas valores a lista podemos hacer asi
listas = ["tengo","tengo","hola"]

listas.append("hola")

print listas
Como ven usamos append en la la lista en la que queremos agregar el valor "hola"

Para mostrar el primer valor de una lista podemos hacer asi
listas = ["tengo","tengo","hola"]
print listas[0] #primer valor
print listas[1] #segundo 
print listas[2] # y tercero

Para calcular la cantidad de valor usamos len() de la siguiente forma
listas = ["tengo","tengo","hola"]
cantidad = len(listas)
print cantidad
Como ven usamos len() para calcular la cantidad de valores en la lista "listas" , entonces el
resultado de dicha funcion se guarda en la variable cantidad , la cual imprimimos por pantalla
despues de calcular.

Para editar cierto valor
listas = ["tengo","tengo","hola"]
listas[0] = "nada"
print listas
Como ven modifique el primer valor de la lista "listas" para que sea "nada" en vez de "tengo"
, despues de dicha tarea usamos print para mostrar la lista "listas" por pantalla.


-- == Tuplas == --

Todo lo que dicho sobre las listas es igual con las tuplas , la unica diferencia entre las dos
es que las tuplas usan () en vez [] en los valores , un ejemplo seria este
lista = ("tengo","tengo","nada")
Ademas los valores de las tuplas no cambian , en vez las listas si permiten modificar sus valores,
Otra cosa es que las tuplas son mas livianas y con ellas podemos ahorrar algo de memoria.
Para concluir las tuplas no permiten agregar valores con append a diferencia de las listas

-- == Diccionarios == --

Bien los diccionarios en python se caracterizan por tener una clave y un valor , un ejemplo de
declarar un diccionario seria.
dicc ={"a":"b","c":"d"}
Como ven tenemos claves y valors relacionadas de la siguiente manera
a = b
c = c
Muy simple quizas este comentario estuvo de mas , si queremos abrir un diccionario y mostrar
sus valores podemos hacer de la siguiente manera
dicc ={"a":"b","c":"d"}
for k in dicc.keys():
 print k+":"+dicc[k]
Como ven tenemos el diccionario llamado "dicc" con sus claves y valores encerrados con {} , cada clave y valor van
separados por una coma , la relacion entre una clave y un valor se hacen con un :
Despues usamos un for para abrir el diccionario , donde usamos la variable k para mostrar por pantalla la clave y el valor
correspondiente.


0x06 : Manejo de errores


Bien , llegamos a un apartado interesante de python , el manejo de errores , muchas veces podemos tener un error donde aparece
en pantalla y pumm termina el script , en python no puede pasar eso , si es que usamos a try y except.

Un ejemplo de como usarlo seria asi
try:
 sdsdsd
except:
 print "error"
Como ven escribimos cualquier cosa y solo aparecio error , nada de errores raros........
Otra cosa es que debemos coordinar los espacios entre try y except de lo contrario habra un orrendo
error , si alguna vez estamos haciendo un bucle o algo asi podemos usar pass para que el error pase de alto de la siguiente
manera
while 1:
 try:
  print "soy inmortal"
  ddssd
 except:
  pass
Como ven tenemos un bucle infinito y protegido contra errores raros , eso si usamos varias veces control+c el bucle se rompe
pero bueno

Tambien podemos rescatar errores cuando cargamos un archivo de la siguiente forma
try:
 lineas = open("no existo.txt", "r").readlines()
except:
 print "error"
Como ven si el archivo no existe solo muestra error con el print que pusimos


0x07 : Variables argumentales


En python tambien tenemos variables argumentales para poder usarlas tenemos que llamar al modulo sys de la siguiente manera
import sys
Como ven , con import podemos llamar a cualquier modulo existente con solo poner el nombre

Para poder usar argumentos tenemos que poner valores despues del nombre del script un ejemplo
seria asi

import sys

print sys.argv[0] #ruta de script
print sys.argv[1] #argumento uno
print sys.argv[2] #argumento dos
Si lo cargamos de la siguiente forma
script.py hola chau
Nos muestra lo siguiente
C:\Documents and Settings\Administrador\Escritorio\Leviatan\Hacking\Warfactory I
II\manuales>test.py hola chau
C:\Documents and Settings\Administrador\Escritorio\Leviatan\Hacking\Warfactory I
II\manuales\test.py
hola
chau
Como ven , sys.argv[0] represente el script cargado , a partir de 1 en adelante son los argumentos
que usamos.

0x08 : Concatenacion

Para concatenar variables normales podemos hacer lo siguiente
hola = "hola"
chau = "chau"
fin = hola+" "+chau
print fin
Como ven primero creamos dos cadenas de texto una llamada hola y otro chau , las dos con el mismo nombre y valor de cada una.
Nuestra idea era unir las dos en un sola llamada fin , entonces lo que hacemos es usar + para unirlas , despues del mas ponemos la
otra variable , como ven tambien le agregue un espacio entre las dos variables para que no se
mostraran pegadas
Finalmente usamos print para mostrar la variable final.


0x09 : Comentarios


Bien , los cometarios como en todos los lenguajes se usan para dejar notas sobre el codigo o sobre
cualquier cosa , aunque se usa frecuentemente para dejar notas explicativas sobre alguna linea de codigo

Para usar comentarios en python tenemos que usar # de la siguiente forma
#hola
Como ven despues del # se considera como comentario en todo la linea , tambien hay que aclarar si cometemos el error de poner
un comentario sin darnos cuenta en mitad del codigo puede dar un resultado odioso

Un ejemplo seria
for #ran in range(1,10):
 print ran
Que nos da como resultado
File "C:\Documents and Settings\Administrador\Escritorio\Leviatan\Hacking\Warf
actory III\manuales\test.py", line 1
    for #ran in range(1,10):
                           ^
SyntaxError: invalid syntax
Si usamos un try y except con un pass no deberia haber ningun problema pero esto es solo un ejemplo de poner
en cualquier lugar un comentario.


0x10 : Entradas de teclado


Si queremos hacer un formulario o menu en python podemos usar raw_input() o input()
Para dar un ejemplo vamos a hacer el tipico menu de la edad y el nombre .


-- == raw_input() == --
print "nombre : "
nombre = raw_input()
print "edad : "
edad = raw_input()
print nombre
print edad
-- == input() == --
print "nombre : "
nombre = raw_input()
print "edad : "
edad = input()
print nombre
print edad
La unica diferencia entre los dos es que input() da error cuando lo ingresado no es de valor
numerico


0x11 : Manejo de split


Para usar split tenemos que importar el modulo re de la siguiente manera
import re
Poniendo de ejemplo la siguiente cadena de texto
texto = "hola mundo soy 123 chau"
Poniendo de ejemplo si lo que queremos es partir la cadena para guardar en una variable
todo lo que esta antes de "soy" podemos hacer esto
import re

texto = "hola mundo soy 123 chau"

te = re.split("soy",texto)
print te[0]
print te[1]
Como ven el resultado es el siguiente
hola mundo
 123 chau
Podemos hacer miles de cosas pero solo estoy enseñando lo basico


0x12 : Funciones


Bueno , al fin llegue a la parte funciones , si lo queremos es crear una funcion que haga alguna cosa o simplemente
reducir codigo con una tarea repetitiva , tendremos que usar las famosas funciones

Para crear una simple tenemos que hacer lo siguiente
def simple():
 print "hola"
Como ven creamos una funcion llamada simple , la cual si es ejecutada nos imprime en pantalla hola
Entonces si queremos que esa funcion se ejecute tenemos que hacer lo siguiente.
def simple():
 print "hola"

simple()
Como ven ponemos el nombre de la funcion con () , de esa forma llamamos a la funcion creada.

Aclaracion : Antes de llamar una funcion esta tiene que estar antes de la llamada , como se muestra arriba, de lo contrario
habra un error

Entonces si lo queremos es mandar dos cadenas de texto a la funcion para que nos retone las dos podemos
hacer lo siguiente
def simple(a,b):
 return a,b

a,b = simple("a","b")
print a
print b
Como ven mandamos dos cadenas de texto encerrada entre parentesis , donde la funcion las captura con las variables a y b
Entonces la funcion retona las dos cadenas de texto donde las recibimos con los nombre de variable a y b
Despues de recibir las variables las mostramos por pantalla

Mostrando esto
a
b
0x13 : Listar directorios y manejo de archivos


Bien primero empecemos por el manejo de directorios

Para cargar un directorio y mostrar los archivos en una lista podemos hacer esto
import glob

dir = "C:/xampp/"
files = glob.glob(dir+"*")
for file in files:
 print file
Como ven el modulo encargado de listar el directorio es glob al cual importamos al inicio del codigo
despues declaramos una cadena de texto con la ruta del directorio a cargar , entonces usamos glob para tener los archivos del
directorio , el * sirve para que liste todos los archivos , despues con la lista retonada con el nombre files , usamos for para
leerla y mostrar todos los archivos por pantalla.

Para verificar la existencia de un directorio podemos usar el modulo os de la siguiente manera
if os.path.isdir("c:/xampp/"):
 print "el vive"
De esa forma si el directorio existe se mostrara en pantalla "el vive"

Si queremos borrar un directorio podemos usar el modulo os de la siguiente forma
os.rmdir("c:/test/")
Con eso borrariamos un directorio

Si queremos mover o renombrar un archivo o un directorio podemos uar el modulo shutil de la
siguiente forma

Con un directorio
import shutil

shutil.move("c:/test/","c:/tes")
Con un archivo
import shutil

shutil.move("file.txt","nada.txt")


Si queremos copiar un archivo o directorio podemos hacer lo mismo con el modulo shutil

Con un directorio
import shutil

shutil.copy("c:/test/","c:/tes")
Con un archivo
import shutil

shutil.copy("c:/test/","c:/tes")
Bien si lo que queremos es leer un archivo y mostrar su contenido en una lista podemos hacer
esto
lineas = open("no existo.txt", "r").readlines()
COmo ven si el archivo existe podremos guardar todos las lineas del archivo abierto y guardarlas
en una lista llamada lineas

Si lo que queremos es verificar la existencia de un archivo podemos hacer lo siguiente
if os.path.isfile("c:/leer.txt"):
 print "bien"
Si el archivo existe el script mostrara en pantalla "bien"

Si lo que queremos es borrar un archivo solo tenemos que hacer esto con el modulo os
import os

os.unlink("c:/jo.txt")
Finalmente si queremos abrir un archivo y mostrar su contenido podemos hacer lo siguiente
lineas = open("test.py","r").readlines()

for linea in lineas:
 print linea
Como ven guardamos en una lista llamada lineas todo el contenido leido en el archivo "test.py" claro lo pueden cambiar pero es solo un ejemplo ,
entonces despues abrimos la lista y mostramos linea por linea en pantalla.


0x14 : Manejo de sockets


Bien , ahora vamos a hablar de sockets , para poder usarlos debemos llamar a la libreria socket de la siguiente
forma
import socket
Entonces imaginemos que queremos mandar una peticion GET a un servidor HTTP mediante sockets para finalmente mostrar el resultado
que no dio la pagina por nuestra peticion GET , lo podriamos hacer asi
import socket

sock = socket.socket()
sock.connect(("localhost",80))
sock.send("GET / HTTP/1.0"+"\r\n")
codex = sock.recv(9999)
print "\n"+codex
Como podemos ver primero creamos el objeto que tiene el modulo socket para poder usar sus funciones con
el nombre sock , entonces usamos connect para poder conectarnos al servidor HTTP , primer ponemos el host y
despues el puerto , despues usamos send para enviar la peticicion , despues usamos recv para capturar la
respuesta con el nombre de codex
Finalmente mostramos por pantalla el valor de la variable codex

Ahora veamos como crear un server usando sockets en python

Un ejemplo de un server seria el siguiente
import socket,re,os

slave = socket.socket()
slave.bind(("",666))
slave.listen(999)

a,b = slave.accept()

while True:
 rex = a.recv(20)
 if re.findall("getso",rex):
  z = os.name
  a.send(z)
Es una porcion de codigo de un pequeño troyano que habia hecho en python , pero vamos a analizar
la parte mas importante del codigo que es el proceso de crear la conexion.
Entonces para empezar creamos el objeto para poder usar las funciones del modulo socket con el
nombre de slave , entonces usamos bind para que nuestra propia computadora abra una conexion en el
puerto 666 , con listen() podemos capturar hacer que la conexion se mantenga.
La parte importante es slave.accept() que es donde se usa para que entren clientes al servidor
socket donde a es el cliente , entonces creamos un bucle infinito usando while , en la parte
del bucle podemos capturar todo el contenido que nos envia el cliente con recv , el contenido
se guarda como una cadena de texto llamada rex , despues usamos el modulo re para poder examinar el
contenido que nos envio el cliente , en la parte de re.findall se intenta confirmar que si en el
texto que nos envio el cliente hay algo como "getso" , si ese patron existe en el la variable
rex usamos el modulo os para enviar el nombre de nuestro sistema operativo con el nombre de una
cadena de texto llamada z , finalmente enviamos el contenido de la cadena de texto usando send


0x15 : Interactuar con webs y expresiones regulares

Bien , ahora es vamos a interactuar con webs , para poder hacer esto tenemos que llamar
al modulo urllib2 con import de la siguiente forma
import urllib2
Entonces para poder realizar una peticion GET tenemos que hacer lo siguiente
import urllib2
nave = urllib2.build_opener()	
nave.add_header = [('User-Agent','Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5')]

code = nave.open("http://127.0.0.1/sql.php").read()
print code
Bien , entonces comencemos a analizar el codigo , primero importamos el modulo necesario para
esto , despues creamos el objeto para poder usar las funciones del modulo usando la variable
nave , entonces usamos la funcion add_header para poner el navegador que estamos usando , despues
usamos open() y read() para leer el contenido de la pagina y guardar el resultado de la misma
en una cadena de texto llamada code
Finalmente mostramos por pantalla el codigo.

Si lo queremos es usar una peticion POST tenemos que hacer lo siguiente

import urllib2
nave = urllib2.build_opener()	
nave.add_header = [('User-Agent','Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5')]

code = nave.open("http://127.0.0.1/post.php","te=probando&ok1=ok").read()
print code


El mismo procedimiento lo unico que cambia es que como segundo parametro en la funcion open usamos
los datos necesarios (inputs) para poder realizar el procedimiento con el metodo POST de la pagina.

Si quieren entender mejor el codigo del formulario este
<form action='' method=POST>
<input type=text name=te value=probando>
<input type=submit name=ok1 value=okr>
</form>
Recuerden que para ordenar los datos para el formulario primero debe ir el name y despues el value tanto de cajas de texto como
el boton.

Se me estaba olvidando como usar expresiones regualares en python , para poder usarlas tenemos que
llamar al modulo re de la siguiente forma
import re
Entonces si tenemos la siguiente cadena de texto como muestra el ejemplo
texto = "Hola soy 123 chau"
Si lo que queremos es sacar solo el 123 tenemos que hacer lo siguiente
import re

texto = "Hola soy 123 chau"

if (re.findall("Hola soy (.*?) chau",texto)):
 nombre = re.findall("Hola soy (.*?) chau",texto)	
 print nombre[0]
Como ven uso (.*?) en findall con referencia a la cadena de texto para capturar lo que sea que halla en ese espacio , despues muestro el resultado
con nombre[0] , claro que si no lo encuentra no imprimira nada.


0x16 : Descarga de archivos


Esto es simple , primero debemos importar el modulo necesario de la siguiente manera
import urllib
[code2=python]

Despues usamos la funcion urlretrieve que trae el modulo importado para bajar el archivo con el nombre que queramos ponerle 
urllib.urlretrieve("http://localhost/t.jp","foto.jpg")
Como ven solo son dos parametros , el primero es la url del archivo a bajar y despues el
nombre que llevara cuando este bajado.

Tambien hay un tercer argumento que es para mostrar el estado del archivo cuando se esta bajando un ejemplo de como usarlo es
asi
import urllib

def proxar(a,b,c):
 cantidad = a * b
 print cantidad

urllib.urlretrieve("http://localhost/t.jp","foto.jpg",reporthook=proxar)
Como ven le agregamos el tercer argumento al que hace referencia a una funcion llamada
proxar , claro puede llevar cualquier nombre , despues en esa funcion calculamos el bloque a * b para
despues guardar su contenido en una cadena de texto , la cual la mostramos por pantalla.


0x17 : Manejo de funciones


Bien , me estaba olvidando de explicar como usar funciones en python , para poder crear una funcion en python tenemos que usar def , un ejemplo seria
asi
def usar(variable):
 print variable

usar("hola")

Como ven usamos def para despues poner el nombre de la funcion a usar , entre parentesis ponemos el nombre de la variable que estamos recibiendo para despues de cerrar los parentesis
poner el tipico : que hace referencia a que comenzo la funcion , despues de eso dejamos un espacio para poner lo que esa funcion hara.
Como ven usamos el nombre "hola" en usar() para poner el texto que le mandamos a la funcion.
Tambien podemos poner mas variables como en el siguiente ejemplo
def usar(variable,dos):
 print variable 
 print dos

usar("hola","chau")
Como ven es lo mismo solo se le agregue otro texto a la funcion usar , y para mostrar el valor usamos la cadena de texto dos

Eso si tambien podemos retornar valores en la funciones como muestra el siguiente ejemplo
def usar(h):
 return h

re = usar("hola")

print re


Como primero ponemos la funcion donde podemos ver que usamos la variable h que vendria a ser lo que recibimos , para despues volver a mandarla como respuesta usando return , tambien
podemos mandar varios valores como en el siguiente ejemplo

def usar(h,i):
 return h,i

re,dos = usar("hola","chau")

print re
print dos



Como ven solo agregamos otra cadena de texto a la funcion usar , lo unico nuevo seria que separamos por coma las cadenas de texto que estamos por recibir despues del parentesis
, tambien vemos como separamos los valores por coma cuando estamos usando return.


0x18 : Creacion de un keylogger


Bien , para poder hacer un keylogger en python vamos a necesitar los modulos pyHook y pythoncom

Los pueden bajar de aca
http://sourceforge.net/projects/pyhook/files/pyhook/1.5.1/pyHook-1.5.1.win32-py2.5.exe/download?use_mirror=ufpr
http://sourceforge.net/projects/pywin32/files/pywin32/Build%20215/pywin32-215.win32-py2.5.exe/download
El segundo es pywin que trae pythoncom entre otros que resultan muy utiles.

Una vez que los tengan instalado lo que tenemos que hacer primero en el script es importar los modulos
descargados de la siguiente manera
import pyHook,pythoncom

Cabe destacar que estos modulos facilitan mucho el trabajo en la creacion de un keylogger , podemos usar las api de windows para hacerlo
pero estos modulos simplifican mucho el trabajo.
def toma(frase):
 print frase.Key

nave = pyHook.HookManager()
nave.KeyDown = toma
nave.HookKeyboard()
pythoncom.PumpMessages()
Como ven primero ponemos la funcion donde se mandara el valor para poder ver la tecla pulsada con el nombre de frase.
Despues vemos como usamos el modulo pyhook para poder usar sus funciones a traves de la variable nave.
Como ven cuando usamos keydown marcamos el nombre de la funcion que usara para capturar el valor de la tecla pulsada


0x19 : Compresion de archivos


Bien , ahora vamos a hablar sobre como comprimir archivos , para empezar tenemos que importar
el modulo necesario el cual es
import zipfile
Una vez importado tenemos que hacer lo siguiente para poder continuar con lo que queremos hacer
zipa = zipfile.ZipFile("probando.zip","w",zipfile.ZIP_DEFLATED)
Como ven creamos el archivo probando.zip con la variable zipa , la cual nos va ayudar a agregar archivos de la siguiente forma
zipa.write("C:/leer.txt")
Como ven agregamos el archivo leer.txt a al archivo comprimido , podemos agregar todos los que queramos , pero si ponemos mal la ruta del
archivo que queremos comprimir vamos a arruinar el script.

Finalmente cuando terminemos de usar el archivo comprimido debemos hacer lo siguiente
zipa.close()

0x20 : Mostrar y ocultar archivos en Windows


Bien , ahora veremos como esconder archivos en Windows , para empezar necesitamos importar dos modulos necesarios
import win32api,win32con
Los podemos bajar de aca (pywin)
http://sourceforge.net/projects/pywin32/files/pywin32/Build%20215/pywin32-215.win32-py2.5.exe/download
Entonces hagamos de cuenta de que tenemos un archivo llamado c:/leer.txt y lo que queremos esconder , entonces tendriamos que
hacer esto
win32api.SetFileAttributes("c:/leer.txt",win32con.FILE_ATTRIBUTE_HIDDEN)
Si lo probamos con un archivo en serio veremos que el archivo no esta , pero que pasa si qureremos ponerle el atributo normal para
que el archivo no se siga escondiendo mas , entonces tenemos que hacer lo siguiente
win32api.SetFileAttributes("c:/leer.txt",win32con.FILE_ATTRIBUTE_NORMAL)
0x21 : Manejo de threads

Bien , no conozco mucho sobre threads , pero me siempre me ha surgido el caso de tener dos cosas o funciones activas al mismo tiempo , eso es lo que voy
a tratar de enseñar.
Para empezar tenemos que importar el modulo necesario de la siguiente manera
import threading
Entonces imaginemos que necesitamos dos funciones las cuales una muestre hola y la otra chau usando print.
Entonces hariamos algo asi
def uno():
 while 1:
  print "hola"

def probardos():
 while 1:
  print "chau"

t1 = threading.Thread(target=uno)
t1.start()

t2 = threading.Thread(target=probardos)
t2.start()
Como podemos ver usamos dos funciones , una llamada uno y la otra probardos , entonces usamos las variables t1 y t2 para poder usar las funciones de thread ,
tambien podemos ver que en target ponemos el nombre de la funcion a usar en thread , tambien podemos ver que en el contenido de cada funcion usamos while para poder mostrar
enternamente un print al mismo tiempo que el otro.
Eso si , siempre tenemos que usar start() de lo contrario la funcion nunca empezarara con su trabajo


0x22 : Compilar script a exe


Para poder compilar scripts en python a exe necesitamos bajar py2exe , lo podemos bajar de aca
http://sourceforge.net/projects/py2exe/files/py2exe/0.6.5/py2exe-0.6.5.win32-py2.5.exe/download
Entonces una vez que lo tengamos instalado tenemos que crear un archivo llamado setup.py con el siguiente contenido
from distutils.core import setup
import py2exe

setup(console=["test.py"])
Como ven importamos dos modulos uno llamado setup y el otro py2exe , despues usamos una funcion llamada setup , la cual tiene un argumento llamado console , como vemos tenemos
entre comillas un archivo llamado test.py ese es el script de ejemplo que pretendo compilar a exe , eso si , si quieren compilar el suyo tienen que poner el verdadero nombre
Entonces para compilar el script tenemos que cargar una consola msdos , despues usen cd para ir al directorio donde estan los dos scripts (setup.py y test.py) , para finalmente ejecutar lo siguiente
setup.py py2exe
Como ven usamos un argumento llamado py2exe el cual es obligatorio para compilar el script , en mi caso me dio el siguiente resultado
Microsoft Windows [Versión 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.

C:\Users\Usuario>dir
 El volumen de la unidad C no tiene etiqueta.
 El número de serie del volumen es: 3CB0-02D7

 Directorio de C:\Users\Usuario

17/07/2011  06:11 a.m.    <DIR>          .
17/07/2011  06:11 a.m.    <DIR>          ..
15/07/2011  11:20 p.m.    <DIR>          .idlerc
19/04/2011  11:16 a.m.    <DIR>          Contacts
18/04/2011  08:34 p.m.    <DIR>          Desktop
19/04/2011  11:16 a.m.    <DIR>          Links
19/04/2011  11:16 a.m.    <DIR>          Saved Games
19/04/2011  11:16 a.m.    <DIR>          Searches
17/07/2011  06:11 a.m.    <DIR>          test
               0 archivos              0 bytes
               9 dirs  141.737.705.472 bytes libres

C:\Users\Usuario>cd test

C:\Users\Usuario\test>dir
 El volumen de la unidad C no tiene etiqueta.
 El número de serie del volumen es: 3CB0-02D7

 Directorio de C:\Users\Usuario\test

17/07/2011  06:11 a.m.    <DIR>          .
17/07/2011  06:11 a.m.    <DIR>          ..
17/07/2011  06:05 a.m.                92 setup.py
17/07/2011  05:58 a.m.               208 test.py
               2 archivos            300 bytes
               2 dirs  141.737.705.472 bytes libres

C:\Users\Usuario\test>setup.py py2exe
running py2exe
creating C:\Users\Usuario\test\build
creating C:\Users\Usuario\test\build\bdist.win32
creating C:\Users\Usuario\test\build\bdist.win32\winexe
creating C:\Users\Usuario\test\build\bdist.win32\winexe\collect-2.5
creating C:\Users\Usuario\test\build\bdist.win32\winexe\bundle-2.5
creating C:\Users\Usuario\test\build\bdist.win32\winexe\temp
creating C:\Users\Usuario\test\dist
*** searching for required modules ***
*** parsing results ***
creating python loader for extension 'unicodedata'
creating python loader for extension 'bz2'
*** finding dlls needed ***
*** create binaries ***
*** byte compile python files ***
byte-compiling C:\Python25\lib\StringIO.py to StringIO.pyc
byte-compiling C:\Python25\lib\UserDict.py to UserDict.pyc
byte-compiling C:\Python25\lib\__future__.py to __future__.pyc
byte-compiling C:\Python25\lib\_strptime.py to _strptime.pyc
byte-compiling C:\Python25\lib\_threading_local.py to _threading_local.pyc
byte-compiling C:\Python25\lib\atexit.py to atexit.pyc
byte-compiling C:\Python25\lib\base64.py to base64.pyc
byte-compiling C:\Python25\lib\calendar.py to calendar.pyc
byte-compiling C:\Python25\lib\codecs.py to codecs.pyc
byte-compiling C:\Python25\lib\copy.py to copy.pyc
byte-compiling C:\Python25\lib\copy_reg.py to copy_reg.pyc
byte-compiling C:\Python25\lib\dummy_thread.py to dummy_thread.pyc
byte-compiling C:\Python25\lib\encodings\__init__.py to encodings\__init__.pyc
creating C:\Users\Usuario\test\build\bdist.win32\winexe\collect-2.5\encodings
byte-compiling C:\Python25\lib\encodings\aliases.py to encodings\aliases.pyc
byte-compiling C:\Python25\lib\encodings\ascii.py to encodings\ascii.pyc
byte-compiling C:\Python25\lib\encodings\base64_codec.py to encodings\base64_cod
ec.pyc
byte-compiling C:\Python25\lib\encodings\big5.py to encodings\big5.pyc
byte-compiling C:\Python25\lib\encodings\big5hkscs.py to encodings\big5hkscs.pyc

byte-compiling C:\Python25\lib\encodings\bz2_codec.py to encodings\bz2_codec.pyc

byte-compiling C:\Python25\lib\encodings\charmap.py to encodings\charmap.pyc
byte-compiling C:\Python25\lib\encodings\cp037.py to encodings\cp037.pyc
byte-compiling C:\Python25\lib\encodings\cp1006.py to encodings\cp1006.pyc
byte-compiling C:\Python25\lib\encodings\cp1026.py to encodings\cp1026.pyc
byte-compiling C:\Python25\lib\encodings\cp1140.py to encodings\cp1140.pyc
byte-compiling C:\Python25\lib\encodings\cp1250.py to encodings\cp1250.pyc
byte-compiling C:\Python25\lib\encodings\cp1251.py to encodings\cp1251.pyc
byte-compiling C:\Python25\lib\encodings\cp1252.py to encodings\cp1252.pyc
byte-compiling C:\Python25\lib\encodings\cp1253.py to encodings\cp1253.pyc
byte-compiling C:\Python25\lib\encodings\cp1254.py to encodings\cp1254.pyc
byte-compiling C:\Python25\lib\encodings\cp1255.py to encodings\cp1255.pyc
byte-compiling C:\Python25\lib\encodings\cp1256.py to encodings\cp1256.pyc
byte-compiling C:\Python25\lib\encodings\cp1257.py to encodings\cp1257.pyc
byte-compiling C:\Python25\lib\encodings\cp1258.py to encodings\cp1258.pyc
byte-compiling C:\Python25\lib\encodings\cp424.py to encodings\cp424.pyc
byte-compiling C:\Python25\lib\encodings\cp437.py to encodings\cp437.pyc
byte-compiling C:\Python25\lib\encodings\cp500.py to encodings\cp500.pyc
byte-compiling C:\Python25\lib\encodings\cp737.py to encodings\cp737.pyc
byte-compiling C:\Python25\lib\encodings\cp775.py to encodings\cp775.pyc
byte-compiling C:\Python25\lib\encodings\cp850.py to encodings\cp850.pyc
byte-compiling C:\Python25\lib\encodings\cp852.py to encodings\cp852.pyc
byte-compiling C:\Python25\lib\encodings\cp855.py to encodings\cp855.pyc
byte-compiling C:\Python25\lib\encodings\cp856.py to encodings\cp856.pyc
byte-compiling C:\Python25\lib\encodings\cp857.py to encodings\cp857.pyc
byte-compiling C:\Python25\lib\encodings\cp860.py to encodings\cp860.pyc
byte-compiling C:\Python25\lib\encodings\cp861.py to encodings\cp861.pyc
byte-compiling C:\Python25\lib\encodings\cp862.py to encodings\cp862.pyc
byte-compiling C:\Python25\lib\encodings\cp863.py to encodings\cp863.pyc
byte-compiling C:\Python25\lib\encodings\cp864.py to encodings\cp864.pyc
byte-compiling C:\Python25\lib\encodings\cp865.py to encodings\cp865.pyc
byte-compiling C:\Python25\lib\encodings\cp866.py to encodings\cp866.pyc
byte-compiling C:\Python25\lib\encodings\cp869.py to encodings\cp869.pyc
byte-compiling C:\Python25\lib\encodings\cp874.py to encodings\cp874.pyc
byte-compiling C:\Python25\lib\encodings\cp875.py to encodings\cp875.pyc
byte-compiling C:\Python25\lib\encodings\cp932.py to encodings\cp932.pyc
byte-compiling C:\Python25\lib\encodings\cp949.py to encodings\cp949.pyc
byte-compiling C:\Python25\lib\encodings\cp950.py to encodings\cp950.pyc
byte-compiling C:\Python25\lib\encodings\euc_jis_2004.py to encodings\euc_jis_20
04.pyc
byte-compiling C:\Python25\lib\encodings\euc_jisx0213.py to encodings\euc_jisx02
13.pyc
byte-compiling C:\Python25\lib\encodings\euc_jp.py to encodings\euc_jp.pyc
byte-compiling C:\Python25\lib\encodings\euc_kr.py to encodings\euc_kr.pyc
byte-compiling C:\Python25\lib\encodings\gb18030.py to encodings\gb18030.pyc
byte-compiling C:\Python25\lib\encodings\gb2312.py to encodings\gb2312.pyc
byte-compiling C:\Python25\lib\encodings\gbk.py to encodings\gbk.pyc
byte-compiling C:\Python25\lib\encodings\hex_codec.py to encodings\hex_codec.pyc

byte-compiling C:\Python25\lib\encodings\hp_roman8.py to encodings\hp_roman8.pyc

byte-compiling C:\Python25\lib\encodings\hz.py to encodings\hz.pyc
byte-compiling C:\Python25\lib\encodings\idna.py to encodings\idna.pyc
byte-compiling C:\Python25\lib\encodings\iso2022_jp.py to encodings\iso2022_jp.p
yc
byte-compiling C:\Python25\lib\encodings\iso2022_jp_1.py to encodings\iso2022_jp
_1.pyc
byte-compiling C:\Python25\lib\encodings\iso2022_jp_2.py to encodings\iso2022_jp
_2.pyc
byte-compiling C:\Python25\lib\encodings\iso2022_jp_2004.py to encodings\iso2022
_jp_2004.pyc
byte-compiling C:\Python25\lib\encodings\iso2022_jp_3.py to encodings\iso2022_jp
_3.pyc
byte-compiling C:\Python25\lib\encodings\iso2022_jp_ext.py to encodings\iso2022_
jp_ext.pyc
byte-compiling C:\Python25\lib\encodings\iso2022_kr.py to encodings\iso2022_kr.p
yc
byte-compiling C:\Python25\lib\encodings\iso8859_1.py to encodings\iso8859_1.pyc

byte-compiling C:\Python25\lib\encodings\iso8859_10.py to encodings\iso8859_10.p
yc
byte-compiling C:\Python25\lib\encodings\iso8859_11.py to encodings\iso8859_11.p
yc
byte-compiling C:\Python25\lib\encodings\iso8859_13.py to encodings\iso8859_13.p
yc
byte-compiling C:\Python25\lib\encodings\iso8859_14.py to encodings\iso8859_14.p
yc
byte-compiling C:\Python25\lib\encodings\iso8859_15.py to encodings\iso8859_15.p
yc
byte-compiling C:\Python25\lib\encodings\iso8859_16.py to encodings\iso8859_16.p
yc
byte-compiling C:\Python25\lib\encodings\iso8859_2.py to encodings\iso8859_2.pyc

byte-compiling C:\Python25\lib\encodings\iso8859_3.py to encodings\iso8859_3.pyc

byte-compiling C:\Python25\lib\encodings\iso8859_4.py to encodings\iso8859_4.pyc

byte-compiling C:\Python25\lib\encodings\iso8859_5.py to encodings\iso8859_5.pyc

byte-compiling C:\Python25\lib\encodings\iso8859_6.py to encodings\iso8859_6.pyc

byte-compiling C:\Python25\lib\encodings\iso8859_7.py to encodings\iso8859_7.pyc

byte-compiling C:\Python25\lib\encodings\iso8859_8.py to encodings\iso8859_8.pyc

byte-compiling C:\Python25\lib\encodings\iso8859_9.py to encodings\iso8859_9.pyc

byte-compiling C:\Python25\lib\encodings\johab.py to encodings\johab.pyc
byte-compiling C:\Python25\lib\encodings\koi8_r.py to encodings\koi8_r.pyc
byte-compiling C:\Python25\lib\encodings\koi8_u.py to encodings\koi8_u.pyc
byte-compiling C:\Python25\lib\encodings\latin_1.py to encodings\latin_1.pyc
byte-compiling C:\Python25\lib\encodings\mac_arabic.py to encodings\mac_arabic.p
yc
byte-compiling C:\Python25\lib\encodings\mac_centeuro.py to encodings\mac_centeu
ro.pyc
byte-compiling C:\Python25\lib\encodings\mac_croatian.py to encodings\mac_croati
an.pyc
byte-compiling C:\Python25\lib\encodings\mac_cyrillic.py to encodings\mac_cyrill
ic.pyc
byte-compiling C:\Python25\lib\encodings\mac_farsi.py to encodings\mac_farsi.pyc

byte-compiling C:\Python25\lib\encodings\mac_greek.py to encodings\mac_greek.pyc

byte-compiling C:\Python25\lib\encodings\mac_iceland.py to encodings\mac_iceland
.pyc
byte-compiling C:\Python25\lib\encodings\mac_latin2.py to encodings\mac_latin2.p
yc
byte-compiling C:\Python25\lib\encodings\mac_roman.py to encodings\mac_roman.pyc

byte-compiling C:\Python25\lib\encodings\mac_romanian.py to encodings\mac_romani
an.pyc
byte-compiling C:\Python25\lib\encodings\mac_turkish.py to encodings\mac_turkish
.pyc
byte-compiling C:\Python25\lib\encodings\mbcs.py to encodings\mbcs.pyc
byte-compiling C:\Python25\lib\encodings\palmos.py to encodings\palmos.pyc
byte-compiling C:\Python25\lib\encodings\ptcp154.py to encodings\ptcp154.pyc
byte-compiling C:\Python25\lib\encodings\punycode.py to encodings\punycode.pyc
byte-compiling C:\Python25\lib\encodings\quopri_codec.py to encodings\quopri_cod
ec.pyc
byte-compiling C:\Python25\lib\encodings\raw_unicode_escape.py to encodings\raw_
unicode_escape.pyc
byte-compiling C:\Python25\lib\encodings\rot_13.py to encodings\rot_13.pyc
byte-compiling C:\Python25\lib\encodings\shift_jis.py to encodings\shift_jis.pyc

byte-compiling C:\Python25\lib\encodings\shift_jis_2004.py to encodings\shift_ji
s_2004.pyc
byte-compiling C:\Python25\lib\encodings\shift_jisx0213.py to encodings\shift_ji
sx0213.pyc
byte-compiling C:\Python25\lib\encodings\string_escape.py to encodings\string_es
cape.pyc
byte-compiling C:\Python25\lib\encodings\tis_620.py to encodings\tis_620.pyc
byte-compiling C:\Python25\lib\encodings\undefined.py to encodings\undefined.pyc

byte-compiling C:\Python25\lib\encodings\unicode_escape.py to encodings\unicode_
escape.pyc
byte-compiling C:\Python25\lib\encodings\unicode_internal.py to encodings\unicod
e_internal.pyc
byte-compiling C:\Python25\lib\encodings\utf_16.py to encodings\utf_16.pyc
byte-compiling C:\Python25\lib\encodings\utf_16_be.py to encodings\utf_16_be.pyc

byte-compiling C:\Python25\lib\encodings\utf_16_le.py to encodings\utf_16_le.pyc

byte-compiling C:\Python25\lib\encodings\utf_7.py to encodings\utf_7.pyc
byte-compiling C:\Python25\lib\encodings\utf_8.py to encodings\utf_8.pyc
byte-compiling C:\Python25\lib\encodings\utf_8_sig.py to encodings\utf_8_sig.pyc

byte-compiling C:\Python25\lib\encodings\uu_codec.py to encodings\uu_codec.pyc
byte-compiling C:\Python25\lib\encodings\zlib_codec.py to encodings\zlib_codec.p
yc
byte-compiling C:\Python25\lib\getopt.py to getopt.pyc
byte-compiling C:\Python25\lib\gettext.py to gettext.pyc
byte-compiling C:\Python25\lib\linecache.py to linecache.pyc
byte-compiling C:\Python25\lib\locale.py to locale.pyc
byte-compiling C:\Python25\lib\macpath.py to macpath.pyc
byte-compiling C:\Python25\lib\ntpath.py to ntpath.pyc
byte-compiling C:\Python25\lib\optparse.py to optparse.pyc
byte-compiling C:\Python25\lib\os.py to os.pyc
byte-compiling C:\Python25\lib\os2emxpath.py to os2emxpath.pyc
byte-compiling C:\Python25\lib\popen2.py to popen2.pyc
byte-compiling C:\Python25\lib\posixpath.py to posixpath.pyc
byte-compiling C:\Python25\lib\quopri.py to quopri.pyc
byte-compiling C:\Python25\lib\random.py to random.pyc
byte-compiling C:\Python25\lib\re.py to re.pyc
byte-compiling C:\Python25\lib\repr.py to repr.pyc
byte-compiling C:\Python25\lib\sre.py to sre.pyc
byte-compiling C:\Python25\lib\sre_compile.py to sre_compile.pyc
byte-compiling C:\Python25\lib\sre_constants.py to sre_constants.pyc
byte-compiling C:\Python25\lib\sre_parse.py to sre_parse.pyc
byte-compiling C:\Python25\lib\stat.py to stat.pyc
byte-compiling C:\Python25\lib\string.py to string.pyc
byte-compiling C:\Python25\lib\stringprep.py to stringprep.pyc
byte-compiling C:\Python25\lib\struct.py to struct.pyc
byte-compiling C:\Python25\lib\textwrap.py to textwrap.pyc
byte-compiling C:\Python25\lib\threading.py to threading.pyc
byte-compiling C:\Python25\lib\token.py to token.pyc
byte-compiling C:\Python25\lib\tokenize.py to tokenize.pyc
byte-compiling C:\Python25\lib\traceback.py to traceback.pyc
byte-compiling C:\Python25\lib\types.py to types.pyc
byte-compiling C:\Python25\lib\warnings.py to warnings.pyc
byte-compiling C:\Users\Usuario\test\build\bdist.win32\winexe\temp\bz2.py to bz2
.pyc
byte-compiling C:\Users\Usuario\test\build\bdist.win32\winexe\temp\unicodedata.p
y to unicodedata.pyc
*** copy extensions ***
copying C:\Python25\DLLs\bz2.pyd -> C:\Users\Usuario\test\dist
copying C:\Python25\DLLs\unicodedata.pyd -> C:\Users\Usuario\test\dist
*** copy dlls ***
copying C:\Windows\system32\MSVCR71.dll -> C:\Users\Usuario\test\dist
copying C:\Python25\w9xpopen.exe -> C:\Users\Usuario\test\dist
copying C:\Windows\system32\python25.dll -> C:\Users\Usuario\test\dist
setting sys.winver for 'C:\Users\Usuario\test\dist\python25.dll' to 'py2exe'
copying C:\Python25\lib\site-packages\py2exe\run.exe -> C:\Users\Usuario\test\di
st\test.exe

*** binary dependencies ***
Your executable(s) also depend on these dlls which are not included,
you may or may not need to distribute them.

Make sure you have the license if you distribute any of them, and
make sure you don't distribute files belonging to the operating system.

   ADVAPI32.dll - C:\Windows\system32\ADVAPI32.dll
   USER32.dll - C:\Windows\system32\USER32.dll
   SHELL32.dll - C:\Windows\system32\SHELL32.dll
   KERNEL32.dll - C:\Windows\system32\KERNEL32.dll


C:\Users\Usuario\test>
Eso seria todo

0x23 : Bibliografia

PDF Python para todos

Publicado: 08 Nov 2021, 10:00
por shadow_panda
la parte donde explica las listas da fallos no se si es solo a mi o a alguien mas vi que la entrada es ya antigua a si que no se si seguirá con soporte

Código: Seleccionar todo

listas = ["hello","world","hola"] for list in listas: print list