如何设置vsvars32环境变量?

时间:2010-10-11 10:02:37

标签: python visual-studio-2008 environment-variables scons

我正在努力为visual studio 2008设置我的scons环境变量 通常我会这样做:

%VS90COMNTOOLS%vsvars32.bat

or 

call %VS90COMNTOOLS%vsvars32.bat

这可以在我的shell中使用。

我尝试使用子进程

在python中执行此操作
subprocess.call([os.environ['VS90COMNTOOLS']+r"\vsvars32.bat"])

输出:

d:\N\workspace>scons test
scons: Reading SConscript files ...
Setting environment for using Microsoft Visual Studio 2008 x86 tools.
KeyError: 'INCLUDE':
上面的

调用批处理过程,但环境变量不会从它继承到我的'主进程。

当我使用时:

subprocess.call([os.environ['VS90COMNTOOLS']+r"\vsvars32.bat"])

我明白了:

d:\N\workspace>scons test
scons: Reading SConscript files ...
WindowsError: [Error 2] The system cannot find the file specified:
  File "D:\N\workspace\SConstruct", line 17:
    subprocess.Popen(["call ", os.environ['VS90COMNTOOLS']+r"\vsvars32.bat"])
  File "C:\Python26\lib\subprocess.py", line 595:
    errread, errwrite)
  File "C:\Python26\lib\subprocess.py", line 821:
    startupinfo)

如何实现?

3 个答案:

答案 0 :(得分:4)

编写一个运行vsvars32.bat的批处理文件,然后以VARNAME=value形式输出值,然后让Python脚本解析值并将它们注入os.environ

这是在python自己的distutils模块see the source here中完成的。

答案 1 :(得分:0)

除了上一个答案。我的SConstruct的摘录:

for key in ['INCLUDE','LIB']:
    if os.environ.has_key(key):
        env.Prepend(ENV = {key.upper():os.environ[key]})

请注意Python中的变量名称区分大小写。确保您的env['ENV'] dict没有重复的变量名称和不同的大小写,否则Windows shell只会看到变量的一个变体。

答案 2 :(得分:0)

已接受答案的简短代码(Python 3):

import os, numpy, PIL
from PIL import Image

# Access all PNG files in directory
allfiles=os.listdir(os.getcwd())
imlist=arr
N=len(imlist)
# Assuming all images are the same size, get dimensions of first         image
w,h=Image.fromarray(imlist[0]).size


# Create a numpy array of floats to store the average (assume RGB images)
brr=numpy.zeros((h,w),numpy.float)

# Build up average pixel intensities, casting each image as an array     of floats
for im in imlist:
    imarr=numpy.array(Image.fromarray(im),dtype=numpy.float)
    brr=brr+imarr/N

# Round values in array and cast as 8-bit integer
brr=numpy.array(numpy.round(arr),dtype=numpy.uint8)

# Generate, save and preview final image
out=Image.fromarray(brr,mode="L")
out.save("Average.png")
out.show()

对我有用!