在当前进程中通过python运行bat文件

2024-01-23

我正在尝试通过 python 脚本构建一个大型系统。我首先需要设置 Visual Studio 的环境。遇到问题后,我决定看看是否可以设置并启动 Visual Studio。我首先设置几个环境变量,然后调用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 文件运行在与脚本运行的子进程不同的子进程中。我确实需要在当前进程中运行它。我的最终目标是在 python 脚本内完成整个构建,并且会有很多调用devenv完成构建的主要部分。

谢谢。


我遇到了和你完全相同的问题。我试图将 vcvarsall.bat 作为用 python 编写的构建脚本的一部分来运行,并且我需要 vcvarsall 创建的环境。我找到了一种方法来做到这一点。首先创建一个名为 setup_environment.bat 的包装脚本:

call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" amd64
set > environment.txt

然后在您调用 vcvarsall.bat 的 python 脚本中,运行包装器脚本,然后将文本文件中的环境变量读取到当前环境中:

    this_dir = os.path.dirname(os.path.realpath(__file__)) # path of the currently executing script
    os.system('call ' + this_dir + '\setup_environment.bat') # run the wrapper script, creates environment.txt
    f = open('environment.txt','r')
    lines = f.read().splitlines()
    f.close()
    os.remove('environment.txt')
    for line in lines:
        pair = line.split('=',1)
        os.environ[pair[0]] = pair[1]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在当前进程中通过python运行bat文件 的相关文章

随机推荐