我试图通过python脚本构建一个大型系统。我首先需要为visualstudio设置环境。有了问题,我决定看看是否可以设置并启动visualstudio。我首先设置几个环境变量,然后调用C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat x64
。在
完成后,我调用devenv /useenv
。如果我在命令提示符下执行这些操作,一切正常,我可以在VS中执行需要执行的操作。我的python代码是:
import os
vcdir=os.environ['ProgramFiles(x86)']
arch = 'x64'
command = 'CALL "' +vcdir+'\\Microsoft Visual Studio 11.0\\VC\\vcvarsall.bat" '+arch
os.system(command)
command = "CALL devenv /useenv"
os.system(command)
如果我运行这个,bat文件将运行,当它尝试devenv
命令时,我发现它无法识别。看起来bat file在与运行脚本的子进程不同的子进程中运行。我真的需要在我当前的流程中运行这个。我的最终目标是在python脚本中完成整个构建,并且将有许多调用devenv
来完成构建的大部分。在
谢谢。在
基于@derekswanson08的回答,我想出了一个更成熟的方法。使用wvwhere.exe与VS 2017一起推出。在
你想做的事是行不通的。
vcvarsall.bat
设置环境变量,这些变量只在特定进程中工作。而且Python进程无法在同一进程空间内运行CMD.exe
进程。在我有几个解决办法给你。在
一种方法是运行
vcvarsall.bat
,然后找出它设置的所有环境变量,并让Python为您设置这些变量。您可以使用命令set > file.txt
保存CMD shell中的所有环境变量,然后编写Python代码来解析该文件并设置环境变量。可能工作太多了。在另一种方法是生成一个运行
vcvarsall.bat
的批处理文件,然后从该批处理文件中启动一个新的Python解释器。新的Python解释器将位于一个新进程中,但它将是CMD.exe
进程下的一个子进程,它将继承所有的环境变量。在或者,嗯。也许最好的办法就是写一个批处理文件,运行
vcvarsall.bat
,然后运行devenv
命令。是的,这可能是最简单的,简单就是好。在需要注意的是,在Windows批处理文件语言(以及之前的DOS批处理文件)中,当您执行另一个批处理文件时,由另一个批处理文件设置的变量是在同一个环境中设置的。在*NIX中,您需要使用一个特殊的命令
source
在同一个环境中运行shell脚本,但这正是它的工作方式。但在进程终止后,您将永远无法保持变量。在我和你有同样的问题。我想逃跑vcvarsall.bat公司作为用python编写的构建脚本的一部分,我需要vcvarsall创建的环境。我找到了一个办法。首先创建一个名为setup的包装脚本_环境.bat公司名称:
然后在python脚本中调用vcvarsall.bat公司,运行包装器脚本,然后将环境变量从文本文件读取到当前环境中:
^{pr2}$相关问题 更多 >
编程相关推荐