2016-02-13 106 views
3

我正在運行一個Python命令+ API來訪問ECMWF(歐洲中程天氣預報中心)數據服務器(稱爲MARS)並下載一些文件(天氣數據)。我啓動與外殼的Python代碼(我使用csh)的殼做./python_script.pyPython命令等待shell(ubuntu csh)完成操作/返回碼

,如果我在腳本下載一個文件(1999一年range(1999, 2000)運行正常,而不是range(1998, 2000)在下面的例子失敗Python腳本)。現在我想下載它們中的很多,並因此循環多年。

我的問題是,似乎Python腳本不會等待shell命令/ API完成並在下一年繼續。它導致錯誤。該文件生成但零大小。

我想知道是否可以指定Python腳本在繼續執行下一個for/loop步驟之前等待在shell窗口中查找某些關鍵字。

我知道我在這種情況下使用了一些特定的API,可能會找到另一個特定於API的解決方案來這樣做,但在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 
+0

確實有數據的所有年份?如果您嘗試使用'range(1998,1999)',它會起作用嗎? –

+0

嗨阿特,感謝您的快速回答,是的,有數據,它的工作發現與範圍(1998,1999) – Nicolas

回答

1

沒有必要在循環導入,也它MIG ht是indentaiton問題。如果您的腳本與您提供的腳本相同,則retrieve不在循環中。 Python中的縮進很重要。

嘗試重寫劇本是這樣的:

#!/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", 
    }) 
+0

嗨尼基塔,感謝您的答案,令人印象深刻的社區快速和幫助... 我有一些縮進我錯誤地複製了),但在for和第一個(縮進)命令行之間也有一些空格。實際上我發現奇怪的是沒有結束命令在哪裏指定......這是由縮進靈敏度來解釋的。我改變了它,它的工作原理! 你搖滾,再次感謝 – Nicolas

+0

@Nicolas,很高興它幫助!您可能想要接受答案作爲解決方案,請參閱http://stackoverflow.com/help/someone-answers。 – Nikita