2016-11-01 3 views
0

Я хочу настроить две отдельные системные переменные через python, чтобы gdal_calc и gdal_translate корректно работали на моем компьютере. Однако это путь, который я добавил, и переменные, которые я добавил, похоже, не работают должным образом. Какие-либо предложения?Настройка системных переменных Windows с помощью Python

#!/usr/bin/env python 

import subprocess 
from subprocess import call 
import sys 
import os 


# make dictionary of environmental variables to set up for gdal_calc and gdal_translate 

gdal_env = os.environ.copy() 

# modify and add variables for environment so that GDAL runs properly 

gdal_env["GDAL_DATA"] = "C:\\Program Files (x86)\\GDAL\\gdal-data" 
gdal_env["GDAL_DRIVER_PATH"] = "C:\\Program Files (x86)\\GDAL\\gdalplugins" 
gdal_env["PATH"] = gdal_env["PATH"] + ";C:\\Program Files (x86)\\GDAL\\bin" 

# Set constants 
# The pathway to the images files are nested within the '--outfile=' command 

inHVFile = os.path.expanduser('~\\Desktop\\Components\\Float32\\newHV32.img') 
outPlacement = os.path.expanduser('~\\Desktop\\Components\\Zeros\\newHVZeros_1.img') 
outVFile = '--outfile=' + outPlacement 
#calc_cmd_HV = ['gdal_calc.py', '-A', inHVFile, outVFile, '--calc=A+1'] 

inVHFile = os.path.expanduser('~\\Desktop\\Components\\Float32\\newVH32.img') 
outPlacement_1 = os.path.expanduser('~\\Desktop\\Components\\Zeros\\newVHZeros_1.img') 
outVFile_1 = '--outfile=' + outPlacement_1 
#calc_cmd_VH = ['gdal_calc.py', '-A', inVHFile, outVFile_1, '--calc=A+1'] 


subprocess.call([sys.executable,'C:\Program Files (x86)\GDAL\gdal_calc.py', inHVFile, outVFile, '--calc=A+1'], env=gdal_env) 
subprocess.call([sys.executable,'C:\Program Files (x86)\GDAL\gdal_calc.py', inVHFile, outVFile_1, '--calc=A+1'], env=gdal_env) 
#subprocess.call([sys.executable, 'C:\\Program Files (x86)\\GDAL\\gdal_calc.py','-A', inHVFile, outVFile, '--calc=A+1']) 

#subprocess.call([sys.executable, 'C:\\Program Files (x86)\\GDAL\\gdal_calc.py','-A', inVHFile, outVFile_1, '--calc=A+1']) 
+1

Как они не работают должным образом? Вы пытаетесь использовать 'subprocess.call' для вызова gdal_calc и gdal_translate? –

+0

Первоначально я запускал свой скрипт в командной строке, и он предположил, что путь к GDAL не существует и что он не может найти файлы DLL. Затем, впоследствии, все шло должным образом. Любая идея, почему она не сможет найти файлы DLL или почему она работает независимо от того, сможет ли скрипт найти их? И я использую subprocess.call для запуска gdal_calc и gdal_translate –

ответ

1

Экологические переменные содержат информацию о файлах и программах, которые могут быть найдены. При использовании Python для вызова программ командной строки через subprocess.call или subprocess.Popen вы можете указать набор переменных окружения во время возникновения подпроцесса. Это делается путем передачи словаря env kwarg call или Popen. Если значение env не указано, будут использоваться переменные среды по умолчанию.

Изменения в переменных среды, хранящихся в os.environ, не будут сохраняться после завершения сеанса Python.

Для вызова программы GDAL с помощью subprocess.call, выполните следующие действия:

import os 
import subprocess 
import sys 

# make dictionary of environmental variables 
gdal_env = os.environ.copy() 

# modify and add variables 
gdal_env["GDAL_DATA"] = "C:\\Program Files (x86)\\GDAL\gdal-data" 
gdal_env["GDAL_DRIVER_PATH"] = "C:\\Program Files (x86)\\GDAL\\gdalplugins" 
gdal_env["PATH"] = gdal_env["PATH"] + ";C:\\Program Files (x86)\\GDAL\\bin" 


# ... do preparation ... 
a = "a.tif" 
b = "b.tif" 
output = "output.tif" 

calc_cmd = [sys.executable, 'gdal_calc.py', '-A', a, '-B', b, '--outfile='+output, '--calc=A+B'] 

# spawn a new subprocess 
subprocess.call(calc_cmd, env=gdal_env) 
+0

Благодарим за помощь. Я внес изменения в свой сценарий, но получаю ошибку OSError: [WinError 193]% 1 не является действительным приложением Win32 Знаете ли вы, что это значит? –

+0

@KosherMoses Я не знаю, что это значит, я действительно не работаю в Windows. Возможно, вам нужно запустить скрипт 'gdal_calc.py' из' python', поэтому запустите 'subprocess.call', как в ваших других вопросах:' [sys.executable, 'gdal_calc.py', '-A ', ...] 'В коде, который вы отправили как ответ, также отсутствует' -' перед 'A' в' calc_cmd_ * ', что может вызвать проблему после запуска' gdal_calc.py'. Как правило stackoverflow, не могли бы вы удалить свой ответ с полным кодом и поместить этот код в редактирование исходного вопроса? –

+0

Извините, что я внесла необходимые изменения, а также сделал и добавил обновление. Теперь я получаю совершенно новую ошибку. [ ' "C: \ Users \ jack.UTILIS \ Desktop \ Components \ Sigma_Test \ ridofZsv2.py", строка 23, в subprocess.call ([sys.executable," C: \ Program Files (x86) \ GDAL \ gdal_calc.py», inHVFile, outVFile, '--calc = A + 1'], окр = gdal_env) NameError: имя 'gdal_env' не defined'] Я ценю все ваши помощь , это очень мило. –

Смежные вопросы