【发布时间】:2023-11-23 06:20:02
【问题描述】:
我想通过 python 脚本在 linux 终端中设置一个环境变量。使用os.environ['BLASTDB'] = '/path/to/directory'时,我似乎可以设置环境变量。
但是,我最初尝试使用 subprocess.Popen 设置此变量,但没有成功。
import subprocess
import shlex
cmd1 = 'export BLASTDB=/path/to/directory'
args = shlex.split(cmd1)
p = subprocess.Popen(args, stdout=subprocess.PIPE).communicate()
为什么subprocess.Popen 设置环境变量 BLASTDB 为 '/path/to/directory' 失败?
注意: 使用时也会失败:
import os
os.system('export BLASTDB=/path/to/directory')
【问题讨论】:
-
注意:
Popen不执行 shell。export是一个内置的 shell,因此如果您尝试运行该命令,您会收到“找不到文件错误”。使用shell=True执行shell 命令(并注意其安全风险!!!) -
从我的测试看来,即使将
shell=True添加到命令中,它实际上并没有改变执行我的python脚本的环境变量,也没有改变python子shell的环境变量这是在执行时创建的。这可能只会改变这个特定子进程的环境,它(没有env添加)将不允许我在修改了该子进程的环境的情况下向终端执行命令。 -
我从来没有说过
shell=True会解决你的问题(否则我会把它作为答案发布)。使用shell=True将是能够运行shell 命令的先决条件。如果没有它,您将收到错误,因为Popen无法找到可执行文件。 -
同意,我试图就我的具体问题向未来的访问者澄清。
标签: python environment-variables subprocess