我正在运行一个Python命令+API来访问ECMWF(欧洲中期天气预报中心)数据服务器(称为MARS)并下载一些文件(天气数据)。我使用shell(我正在使用csh)通过在shell中执行
如果我下载单个文件(将脚本中的年份设置为1999,而不是下面失败的Python脚本中的
我的问题是,似乎Python脚本没有等待Shell命令/ API完成,就继续执行下一年份。这会导致错误。文件已生成,但大小为零。
我想知道是否可以指定Python脚本在继续进行下一次for / loop步骤之前等待在shell窗口中找到某些关键字。
我知道我在这种情况下正在使用一些特定的API,可能可以找到另一种API特定的解决方案,但我认为通过识别shell中的一些打印输出更容易。
例如,它可以是“传输速率”,该速率似乎仅在作业完成后出现在shell窗口中,请参见我保存在shell中的日志(最后几行)(使用
我的Python代码如下:
./python_script.py
来启动Python代码。如果我下载单个文件(将脚本中的年份设置为1999,而不是下面失败的Python脚本中的
range(1998, 2000)
),它可以正常运行。现在我想下载多个文件,因此对年份进行循环。我的问题是,似乎Python脚本没有等待Shell命令/ API完成,就继续执行下一年份。这会导致错误。文件已生成,但大小为零。
我想知道是否可以指定Python脚本在继续进行下一次for / loop步骤之前等待在shell窗口中找到某些关键字。
我知道我在这种情况下正在使用一些特定的API,可能可以找到另一种API特定的解决方案,但我认为通过识别shell中的一些打印输出更容易。
例如,它可以是“传输速率”,该速率似乎仅在作业完成后出现在shell窗口中,请参见我保存在shell中的日志(最后几行)(使用
./python_script.py >& log_file.log
)。我的Python代码如下:
#!/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",
})
我只展示下载某个文件时的日志最后几行(成功):
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
range(1998,1999)
,它是否有效? - Arton Dorneles