Ejecutar Comando Linux cada X segundos! Nociones de Programacion en Python y BASH [PARTE 1]
Partes de este POST:
- Introducción a los Bucles.
- El Bucle FOR
- El Bucle WHILE
- Los bucles desde la Consola.
- Algunos problemas para la próxima publicación.
En estos días he estado trabajando sobre mi BOT ADA CRYPBOT **SS** y me planteaba algunas estrategias para hacer que el BOT funcionara cada 10 minutos ó 5 minutos, al final la única que me funcionaria es usar las Librerías de CRON sobre ODOO, ya me tomare mi tiempo para explicar como Funcionan las Tareas programadas en ODOO y quizás hagamos un modulo sencillo.
Pero creo que aun de los errores podemos aprender y sacar provecho y hoy voy a compartir algunas reseñas de pequeños trozos de código que nos ayudaran a entender para que nos puede servir un bucle y como usarlo en la consola o en python para hacer una tarea repetidamente!
Los bucles son sentencias de código que nos permiten recorrer o ejecutar otras sentencias hasta que se llega a un limite fijado o ocurre un evento deseado o no deseado, Existen 2 Tipos de Bucles que necesitamos tener presente:
- Bucle FOR
- Bucle WHILE
El Bucle FOR:
El bucle FOR se caracteriza por tener un recorrido limitado, se usa para tener control de otras sentencias de código repetidas una cantidad finita de veces, en pocas palabras repetir algo un numero definido de veces, por ejemplo queremos decir hola a todos nuestros amigos de steemit, podríamos mandarle 0.001 STEEM con un mensaje de hola solo escribiendo algo así:
El Ejemplo esta presentado para python aunque BASH es muy similar
lista_amigos = ['@dan', '@odic3o1', '@yonner', '@dgraphic', '@torkot', '@jesuscirino', '@nenio', '@elguille','rnunez09']
memo = "hola"
cantidad = 0.001
moneda = "STEEM"
for amigo in lista_amigos_steemit:
api_steemit.enviar(memo, amigo, cantidad, moneda)
print memo," : ",amigo
Si nos fijamos bien y colocamos un print en la linea dentro del for, podremos ver como el for recorre la lista de amigos y toma 1 cada ves que la recorre dejando así:
HOLA : dan
HOLA : odic3o1
HOLA : yonner
HOLA : dgraphic
HOLA : torkot
HOLA : jesuscirino
HOLA : nenio
HOLA : elguille
HOLA : rnunez09
Si estuviéramos conectados a la API de steemit se les enviaría una cantidad de STEEM que fue la moneda elegida y un mensaje que seria HOLA nombre de amigo en la lista.
El Bucle WHILE:
El Bucle while es diferente a FOR,aunque podríamos hacer que se comporte de la misma manera y de la misma salida, debemos aprender a usar las herramientas para lo que fueron hechas!!!
El buble while se usa para ejecutar un ciclo hasta que suceda algún evento, por ejemplo si el usuario pulsa la letra "a" romper el ciclo o si se cumple una condición terminar el Ciclo, ojo debemos tener en cuenta que si la condición nunca se cumplirá podemos entrar en un bucle infinito, ya que no se llegara nunca a la condición por ejemplo:
El Ejemplo esta presentado para python aunque BASH es muy similar
i = 0
while i == -5:
i = i + 1
Este bucle sera infinito por que 'i' siempre ira aumentando de valor y nunca va a ser negativo.
Los bucles desde la Consola:
Ahora colocar Bucles en la consola es bastante sencillo, y ya que le hemos dado una vuelta a los bucles desde una perspectiva pythonica te mostrare como repetir un comando desde la consola aunque al final no me pareció tan funcional:
Bucle WHILE en la consola, 1 ejemplo y pequeña explicación del comando:
#!/bin/bash
while true
do
date +"%H:%M:%S"
sleep 10
done
El Bash ejecuta los comandos directamente desde el OS o desde el Sistema por lo que no requiere importar librerías, ya que usa las del Sistema Operativo.
La primera linea dice #!/bin/bash que sera la consola a usar,
Fijate en la segunda linea while
true
, NO TIENE dos puntos al final pero podría ser confundida con python fácilmente por lo demás.
La tercera linea con el do
si es muy de BASH, recuerda que Bash es imperativa es decir va linea a linea, por lo que ese comando quiere decir es hacer.
La cuarta Linea es el comando que ejecutaremos en este caso la hora formateada: date +"%H:%M:%S"
La quinta linea lleva un sleep para dormir durante los segundos que necesitemos esperar, por ejemplo tenemos APIs que si les mandas cada X segundos peticiones pueden bloquearte.
En la linea final tenemos done
que significa hecho, y termina el ciclo.
Para poder correrla en la Consola seria algo así:
while true; do clear ; date +"%H:%M:%S"; sleep 10; done
Si queremos usar un script sustituimos el comando por la ruta del archivo.py
while true; do clear ; /ruta/archivo.py; sleep 10; done
BASH no es tan estricto como Python con las identaciones.
Bucle FOR en la consola, 1 ejemplo y pequeña explicación del comando:
for (( i=0; i<10; i++ )); do clear ; python /ruta_archivo/arbitraje_criptomonedas.py; sleep 360; done
Este ejemplo es muy parecido a el bucle While pero aquí podemos colocar el limite, en el ejemplo vamos desde 0 a 9, es decir vamos a repetir la ejecución 10 veces, te invito a modificarlo y ejecutarlo :D
Solo debes fijarte en el sleep puedes colocarle 5, y cambiar i=0; i<10; i++
por i=0; i<3; i++
y cambiar la ruta del archivo por tu archivo.
Hasta la próxima espero haya sido de ayuda.
Algunos problemas, Donde nace el problema!
El problema nace a raíz de que necesito ejecutar la llamada a varias APIs de Cripto-monedas al mismo tiempo, por lo que estoy intentando buscar la mejor solución a este problema, al final me decidí a montar todo en ODOO, manteniendo una Base de datos con Diccionarios pero guardándola en ODOO es la manera mas precisa de guardar los datos y extraer lo que necesite cada momento.
El problema esta resuelto pero aun necesito un VPS con mejores condiciones que el que poseo pero ya eso se ira dando poco a poco.
Dios les Bendiga, Dios Bendiga a Venezuela, recuerda Votar y seguirme para enterarte como va el proyecto Saludos.