Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

705
Vistas
FileNotFoundError: [Errno 2] No existe tal archivo o directorio + os.execv

Estoy creando un script contenedor para ejecutar mis programas de python. La lógica es como:

  1. Instalaré todos mis módulos requeridos en un contenedor docker
  2. Tire del contenedor y ejecute el script, para que cualquiera pueda ejecutar mis scripts sin preocuparse por los módulos dependientes.
  3. Creé un script contenedor que será llamado para ejecutar el programa deseado

Este es mi script contenedor:

 import os import sys import argparse parse = argparse.ArgumentParser() parse.add_argument('command', help="give datacenter name") parse.add_argument('args', nargs=argparse.REMAINDER) parse_arguments = parse.parse_args() ''' Co-relate to the command and corresponding scripts to trigger ''' scripts = { 'verify' : '/path/verify.py' } if __name__ == '__main__': if parse_arguments.command not in scripts: print('These are the available scripts to run:') print('\n'.join(sorted(scripts.keys()))) else: os.execv(scripts.get(parse_arguments.command), [scripts.get(parse_arguments.command)] + parse_arguments.args) .

Estoy ejecutando esto como,

 $ docker run -it --rm --net host run-script verify --listenv tpc1 Traceback (most recent call last): File "/path/runme.py", line 28, in <module> os.execv(scripts.get(parse_arguments.command), [scripts.get(parse_arguments.command)] + parse_arguments.args) FileNotFoundError: [Errno 2] No such file or directory

Mi imagen Docker es run-script

Si ejecuto el mismo código desde mi máquina local, funciona. pero dentro del contenedor muestra que este archivo no encuentra el error.

¿Puede alguien ayudarme con esto?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

El primer argumento pasado a sys.argv es la ruta al archivo en ejecución, aquí /path/runme.py . El archivo se encuentra cuando se ejecuta desde su máquina local, pero probablemente no en el contenedor de la ventana acoplable (no estoy seguro de por qué).

Intente establecer el parámetro prog al instanciar su ArgParser, algo como:

 parse = argparse.ArgumentParser(prog="run_me.py")
over 4 years ago · Santiago Trujillo Denunciar

0

Logré resolver este problema. El problema fue principalmente con el tinglado que proporcioné. Entonces, cuando estaba ejecutando el script en el contenedor docker, estaba verificando para ejecutar el código desde la ubicación shebang.

Diría que es un error de mi parte, FileNotFoundError no me estaba dando una pista de shebang. Finalmente, lo descubrí.

@ olinox14: gracias por su actualización, el parámetro "prog" en argparse me ayudó a generar un mejor mensaje de ayuda con el nombre del script en el contenedor de la ventana acoplable, en lugar de la ruta completa dentro del contenedor de la ventana acoplable.

over 4 years ago · Santiago Trujillo Denunciar

0

os.execv(program, args) de forma predeterminada no busca el programa (primer argumento) en función de la variable de entorno PATH. os.execvp lo hace.

De la documentación de os.execv :

os.execv(path, args)

Las variantes que incluyen una "p" cerca del final (execlp(), execlpe(), execvp() y execvpe()) utilizarán la variable de entorno PATH para ubicar el archivo del programa.

Entonces, os.execvp o proporcione la ruta completa al programa que se ejecutará en os.execv .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda