首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保持Popen调用之间的环境

保持Popen调用之间的环境
EN

Stack Overflow用户
提问于 2019-09-12 13:56:22
回答 1查看 98关注 0票数 1

我有一个脚本,想做以下事情:

  1. 激活一个emscripten版本(这是可配置的)
  2. 用emscripten cmake工具链配置cmake
  3. 构建项目

1.我用

代码语言:javascript
复制
from subprocess import Popen

emsdk_path = os.path.join(os.getenv('EMSDK'))
emsdk_bat = os.path.join(emsdk_path, 'emsdk.bat')
Popen('{0} activate latest'.format(emsdk_bat)).communicate()

还有2个人。

代码语言:javascript
复制
  Popen(['emcmake', 'cmake', '-DCMAKE_BUILD_TYPE=Release', '-G "Ninja" ..'], shell=True).communicate()

第一个调用成功完成,但问题是接下来的调用是一个不同的Popen调用,它忘记了有关emscripten的所有内容,因为环境再次被重置。

是否有方法从一个Popen调用中提取环境状态并在另一个调用中使用它?

我知道env参数在Popen中,但问题是emsdk.bat正在更新环境,我不知道如何将它带回到python中。

我尝试过的另一件事是在第一个进程中将环境写入文件。

代码语言:javascript
复制
Popen('{0} activate latest && echo %PATH% > env.txt'.format(emsdk_exe), shell=True).communicate()

但是env.txt仍然包含旧的环境。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-12 22:07:55

如果使用bash,可以在一个popen调用中使用";“作为分隔命令的参数。

代码语言:javascript
复制
  Popen(['{0} activate latest'.format(emsdk_bat),";",'emcmake', 'cmake', '-DCMAKE_BUILD_TYPE=Release', '-G "Ninja" ..'], shell=True).communicate()

这只在不需要这两种输出的情况下才能工作,因为它只返回最后的输出,但它将保留第二个命令的实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57908331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档