我的問題是有關這個問題早 - Python subprocess usagePython腳本:使用子
我試圖使用python
nccopy -k 4「http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis2/pressure/air.2014.nc?air[408:603][2][20:34][26:40]」富來運行這個命令.nc
當我運行上述命令時,我應該能夠在我的磁盤上看到名爲foo.nc的文件或網絡錯誤,指出無法訪問該URL或未找到遠程URL。
目前ESRL NOAA服務器宕機 - 所以當我運行上面的命令,我得到
語法錯誤,意想不到的$結束,預計SCAN_ATTR或SCAN_DATASET或SCAN_ERROR 背景:^ 的NetCDF:訪問故障 地點:文件nccopy.c;線1348
我應該得到同樣的錯誤,當我運行python腳本
這是我的代碼,我無法弄清楚到底如何進一步進行 -
我試圖分裂「 -k 4" 成兩個參數並刪除引號,我仍然得到這個錯誤nccopy:無效的格式:4個
打印(sys.argv中)data.py
[ 'data.py' 的結果,「 -k','4','http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis2/pressure/air.2014.nc?air[480:603][20:34][26:40]','foo.nc']
import numpy as np
import subprocess
import sys
url = '"http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis2/pressure/air.2014.nc?air[408:603][2][20:34][26:40]"'
outputFile = 'foo.nc'
arg1 = "-k 4"
arg3 = url
arg4 = outputFile
print (input)
subprocess.check_call(["nccopy",arg1,arg3,arg4])
首先,請使用[shlex](https://docs.python.org/3/library/shlex.html),如果可能,請使用'Popen()'而不是'check_call()'。另外你的問題是你不分開'-k'和'4'。子進程自動嘗試爲每個參數元素插入一個空格。嘗試使用'[「nccopy」,'-k','4']' – Torxed
當調用系統命令時,傳統的shell邏輯仍然適用,意味着'''可以解析變量和字符,而'''不包含參數除非你想解析參數,否則我會用'''來包裝參數。 – Torxed