2013-07-13 32 views
0

我想寫一個Python腳本:與循環subprocess.call()Python的錯誤

  1. 讀取所有子目錄中的目錄(這是循環1)

  2. 讀取當前圖像在子目錄(不是循環,因爲它只有一個 圖像)

  3. 閱讀此影像後,修復的東西,它在當前的子目錄中寫入新的圖像 。

所有這一切都OK,但是當我嘗試這個新的映像運行subprocess.call(),我有一個問題:

新形象 - > subporcess.cal() - >新圖像2

從python腳本生成的'new image 2'在打開時會給出一個錯誤(但是如果我嘗試通過命令行運行或者不通過子目錄循環運行)。

這裏是我的代碼,我上面描述:

for dayFolder in listDayFolder: 
      output_dataset.GetRasterBand(1).WriteArray(data1) 

     warp = "gdalwarp -t_srs '+proj=longlat +datum=WGS84 +no_defs' -ot Float32 -tps mecrator.tif " + fileName + ".tif"; 


     pipe = subprocess.call([warp], stdout=subprocess.PIPE, shell=True) 
+0

你的縮進到處都是......是代碼實際上看起來如何? (因爲如果是這樣,它甚至不會運行,但會給你一個'IndentationError')。 –

+0

你爲什麼使用'shell = True'?您沒有使用任何shell功能,您唯一要做的就是繼續打開安全漏洞。另外,如果你想檢查stdout,你可以使用'subprocess.check_output'(注意,在'subprocess.call'中文檔明確指出*避免*設置'stdout = PIPE',因爲這可能導致死鎖!)。 – Bakuriu

回答

0

我的猜測是,難的是這樣一個事實:fileName沒有被重新分配。我敢打賭,如果您在致電subprocess.call之前致電print warp,您會注意到大量重複的相同命令。也許你的意思是這樣的:

warp = "gdalwarp -t_srs '+proj=longlat +datum=WGS84 +no_defs' "+ 
     "-ot Float32 -tps mecrator.tif " + dayFolder + "/" + fileName + ".tif"