保持Popen调用之间的环境

2024-05-08 14:06:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

为1。我用

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()

两个人。你知道吗

  Popen(['emcmake', 'cmake', '-DCMAKE_BUILD_TYPE=Release', '-G "Ninja" ..'], shell=True).communicate()

第一个调用成功完成,但问题是下一个调用是另一个Popen调用忘记了emscripten的所有内容,因为环境再次重置。你知道吗

有没有办法从一个Popen调用中提取环境状态并在另一个调用中使用它?你知道吗

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

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

Popen('{0} activate latest && echo %PATH% > env.txt'.format(emsdk_exe), shell=True).communicate()

但是env.txt仍然包含旧环境。你知道吗


Tags: pathenvcmakeformat环境osshelllatest
1条回答
网友
1楼 · 发布于 2024-05-08 14:06:55

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

  Popen(['{0} activate latest'.format(emsdk_bat),";",'emcmake', 'cmake', '-DCMAKE_BUILD_TYPE=Release', '-G "Ninja" ..'], shell=True).communicate()

这只适用于不需要两个输出的情况,因为它只返回最终输出,但它将保留第二个命令的实例。你知道吗

相关问题 更多 >