Lanzar comandos de consola con python y paramiko

A veces, desde una web o un script de python, necesitamos poder ejecutar comandos de consola. Para lanzar comandos tenemos 2 formas, una es ejecutar directamente en la consola mediante system y la otra es utilizar un cliente de ssh como paramiko.

En el paquete os tenemos una función llamada system que ejecuta directamente un comando como en consola pasandole como parámetro el comando a ejecutar. Este es el ejemplo más sencillo que podemos hacer. Aunque hay otras formas como por popen, creo que para cosas sencillas es mas rápido os.system. Recordad que hay que importar el paquete os antes de usarlo.

Otra forma de ejecutar comando de consola es hacer uso de paramiko, un magnífico cliente de ssh para python. Con paramiko, podremos hacer uso desde python de conexiones por ssh y sftp, por lo que podremos trabajar directamente contra servidores linux de una forma sencilla. Decir que paramiko no viene por defecto con python y deberéis instalarlo de la página oficial de paramiko o con pip. Recordad también que para utilizar paramiko es recomendable configurar claves ssh para acceder sin contraseña. Para establecer una conexión por ssh con paramiko utilizaremos paramiko.SSHClient para crear un nuevo cliente ssh al que posteriormente conectaremos a un servidor con unas credenciales y por último utilizaremos client.exec_command con nuestro comando a ejecutar. Como veis esto es muy sencillo, aunque puede complicarse por temas de claves, permisos y demás. Ahora unos ejemplos.

Os dejo a continuación un ejemplo de ejecución de un comando por consola:

import os

os.system("cp -r directorio1 directorio2")

Os dejo un ejemplo de conexión con paramiko:

import paramiko

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("miserver", username="miusuario", password="mipass")

stdin, stdout, stderr = client.exec_command("cp -r directorio1 directorio2")

5 comentarios en “Lanzar comandos de consola con python y paramiko

  1. Pingback: Bitacoras.com
  2. como le hago si por ejemplo, en vez de ser directorios estaticos como aparecen en el ejemplo (directorio1 y directorio2), los nombre de estos los ingresa el usuario. He estado probando y he escrito algo asi para mover un directorio dentro de otro, pero no me funciona bien; os.system("mv "+proyecto+" "+directorio)

    gracias por su ayuda.

  3. Hola jjmoncar.

    Vamos por partes, en primer lugar, el como hacerlo para que sea interactivo, depende de como sea tu aplicación. Yo estos comandos los he sacado directamente de una web que tuve que montar. En una web puedes montarlo como servicios de un controlador por ejemplo.

    Por otro lado, al hacer el os.system("mv.....") piensa en donde estas ejecutando el script, porque si por ejemplo lo ejecutas en una web, no va a estar en tu home sino en algún /usr/local/bin o donde lo tengas instalado y corriendo.

    1. Hola asi puedes hacerlo:

      import os
      def copiar_dir( directorio1, directorio2):
      os.system("cp -r " + directorio1 + " "+ directorio2)
      # Ejecutas de la siguiente manera, teniendo en cuenta los 2 parametros que le pasas a la funcion.
      copiar_dir("dir_base","dir_copia")

  4. hola buenas, necesito si me pueden ayudar, estoy buscando informacion sobre como llamar o ejecutar servicios desde python ejemplo dentro de un script en python mandar a reiniciar el apache u otro servicio como el iscsi.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *