es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es el equivalente de `shell=True` en `paramiko`?

Estoy utilizando la clase SSHClient de paramiko para controlar un servidor mediante el método exec_command. Sin embargo, no logro utilizar Python allí, ya que muestra el error python not found y me he dado cuenta de que el entorno completo de conda no está presente. En mi máquina local, lo soluciono utilizando shell=True al pasarlo a subprocess. Pregunta: ¿cómo puedo hacer esto en paramiko o hay otro comando que debo ejecutar para cargar conda en la terminal del servidor?

EDIT: el método exec_command ofrece la palabra clave opcional environment, pero no sé cómo aprovecharla, si es que es útil.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para cargar conda en la shell del servidor al usar exec_command con paramiko, puedes pasar el comando necesario para cargar conda al método exec_command.

    Por ejemplo, puedes probar lo siguiente:

    import paramiko
    
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect('nombre_servidor', username='nombre_usuario', password='contraseña')
    
    stdin, stdout, stderr = client.exec_command('. /ruta/a/conda/bin/activate && <comando_aquí>')
    
    # Leer la salida
    out = stdout.read().decode()
    err = stderr.read().decode()
    print(out, err)
    

    En el ejemplo anterior, el comando . /ruta/a/conda/bin/activate se utiliza para activar el entorno conda antes de ejecutar el comando deseado con exec_command. De esta manera, conda debería cargarse en la shell del servidor y estar disponible para su uso en comandos posteriores.

    Puedes reemplazar <comando_aquí> con el comando real que deseas ejecutar en el entorno conda activado.

    Además, puedes utilizar el argumento opcional environment en el método exec_command para establecer variables de entorno específicas de tu entorno conda. Por ejemplo:

    client.exec_command('echo $PATH', environment={'PATH': '/ruta/a/conda/bin:$PATH'})
    

    Esto agregaría el directorio bin del entorno conda a la variable de entorno PATH durante la ejecución del comando.</comando_aquí></comando_aquí>

Comments are closed.