Creando comandos de sistema con python

Hola a tod@s, esta vez os voy a hablar sobre una forma muy útil de programar comandos para linux, windows... en python, para ello usaremos el módulo "sys".

Para el que no lo sepa, un comando no es mas que un programa que recibe una entrada por consola y devuelve una salida, un comando simple debe tener el siguiente formato:



mi_comando variables_del_comando




¿Para que pasar nuestros programas en python a comandos?, bueno, pues si son programas de cálculos matemáticos o que pueden resultar útiles en otros programas, pues nos viene muy bien para poder utilizarlos por consola sin ejecutar python y estemos situados desde consola donde queramos, sin mencionar los usos que podemos darle combinandolo con programación en "bash", pero eso ya es otro tema.

Por ejemplo vamos a codear un programa que suma dos números, pero en modo comando, sería así:


#!/usr/bin/python

import sys

def suma(a, b):
   return a+b

print suma(int(sys.argv[1]), int(sys.argv[2]))


Cómo veis es muy sencillo, tan sólo tenemos que usar la lista que nos brinda el módulo sys llamada "argv", en la cual se guardan todos los argumentos que le pasamos al comando, el elemento "1", sería el primer valor pasado, el "2" el segundo y así sucesivamente, el "0" sería el propio comando que se está ejecutando.

Para "instalarlo", es decir, para hacer uso de él, solo hay que copiarlo en el directorio /bin/ en linux y darle permisos de ejecución, después bastará con tipear por consola:

suma numero1 numero2

Y nos imprimirá la suma, la función int() que envuelven los valores de la función suma, sirve para convertir una variable String en un Int, ya que por defecto, los valores que nos proporciona argv son de tipo string, si no lo transformásemos en Int, al hacer:

suma 5 4  --> Nos devolvería "54", en vez de 9

Por ejemplo, aplicándo esta técnica al pequeño script que transformaba números de decimal a binario que os mostré, se quedaría de la siguiente forma:


#!/usr/bin/python

#comando que pasa de decimal a binario, colocar en /bin/

import sys

def bin(num):
 binario=[] 
 while (num/2!=0):
  binario.append(num%2)
  num/=2

 binario.append(1)
 num_elementos=binario.count(0)+binario.count(1)

 while (num_elementos<8):
  binario.append(0)
  num_elementos+=1

 binario.reverse()
 return binario

if __name__=="__main__":

 try:
  for elementos in bin(int(sys.argv[1])):
   sys.stdout.write(str(elementos))
  sys.stdout.write('\n')
 except:
  print "Por favor introduce un numero y no un String"

Cómo veis es muy sencillo pero la mar de práctico, así podemos tener localizado un archivo python estemos donde estemos y sin tener que ejecutar python, y sin más, un abrazo y hasta el próximo post.

0 comentarios: