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

288
Vistas
Comando de Python para esperar a que Shell (ubuntu csh) termine la acción/código de retorno

Estoy ejecutando un comando de Python + API para acceder al servidor de datos ECMWF (Centro Europeo para el Pronóstico del Tiempo de Rango Medio) (llamado MARS) y descargar algunos archivos (datos meteorológicos). Ejecuto el código de Python con shell (estoy usando csh) haciendo ./python_script.py en el shell

Funciona bien si descargo un solo archivo (año 1999 con range(1999, 2000) en mi secuencia de comandos, en lugar de range(1998, 2000) en el siguiente ejemplo fallido de secuencia de comandos de Python). Ahora quiero descargar muchos de ellos y así hacer un bucle a lo largo de los años.

Mi problema es que parece que la secuencia de comandos de Python no espera a que finalicen los comandos de shell / API y continúe el próximo año. Da como resultado errores. El archivo se produce pero con tamaño cero.

Me gustaría saber si puedo especificar la secuencia de comandos de Python para esperar a encontrar algunas palabras clave en la ventana de shell antes de continuar con el siguiente paso for/loop.

Sé que estoy usando alguna API específica en ese caso y probablemente podría encontrar otra solución específica de API para hacerlo, pero me parece más fácil identificar alguna impresión en el shell.

Podría ser, por ejemplo, "Tasa de transferencia", que parece aparecer en la ventana de shell solo cuando se ha realizado el trabajo, vea el registro (últimas líneas exitosas) que he guardado desde shell (con ./python_script.py >& log_file.log

MI CÓDIGO PYTHON ES:

 #!/usr/bin/env python for year in range(1998, 2000): from ecmwfapi import ECMWFDataServer server = ECMWFDataServer() server.retrieve({ "class": "e2", "dataset": "era20c", "date": '%d-07-01/%d-07-02' % (year,year), "domain": "g", "area" : "12/-72/-67/22", "grid" : "1.0/1.0", "expver": "1", "param": "214.140/233.140", "step": "3/9/15/21", "format" : "netcdf", "stream": "wave", "target": '/home/nicolas/hycom/hycom_data/ECMWF/ERA20C/forecast/%d/test_era20c_wave_set1.nc' % (year), "time": "06", "type": "fc", })

MI REGISTRO ÚLTIMAS LÍNEAS PARA LA DESCARGA DE UN ARCHIVO SOLAMENTE (EXITOSO):

 2016-02-13 16:00:21 Request is complete 2016-02-13 16:00:21 Transfering 239.441 Kbytes into /home/nicolas/hycom/hycom_data/ECMWF/ERA20C/forecast/1999/test_era20c_wave_set1.nc 2016-02-13 16:00:21 From http://stream.ecmwf.int/data/atls04/data/data01/scratch/_grib2netcdf-atls04-95e2cf679cd58ee9b4db4dd119a05a8d-JLUk0w.nc 2016-02-13 16:00:28 Transfer rate 32.6278 Kbytes/s
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No hay necesidad de importar en el ciclo, también podría ser un problema de sangría. Si su secuencia de comandos es como la proporcionó, entonces la retrieve no está en el bucle. La sangría en python importa mucho.

Intenta reescribir el script de esta manera:

 #!/usr/bin/env python from ecmwfapi import ECMWFDataServer server = ECMWFDataServer() for year in range(1998, 2000): server.retrieve({ "class": "e2", "dataset": "era20c", "date": '%d-07-01/%d-07-02' % (year,year), "domain": "g", "area" : "12/-72/-67/22", "grid" : "1.0/1.0", "expver": "1", "param": "214.140/233.140", "step": "3/9/15/21", "format" : "netcdf", "stream": "wave", "target": '/home/nicolas/hycom/hycom_data/ECMWF/ERA20C/forecast/%d/test_era20c_wave_set1.nc' % (year), "time": "06", "type": "fc", })
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