我正在努力为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)
如何实现?
答案 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()
对我有用!