将bashrc的环境变量加载到Python中

3

我想使用Spyder设置我的.bashrc环境变量;换句话说,我正在寻找一个Python命令来读取我的.bashrc。您有任何想法吗?


1
.bashrc只是一个文件,您可以使用标准调用读取/写入它。 - tzaman
2
你的意思是你正在尝试向bashrc添加一行,设置父进程环境变量或设置自己进程环境变量中的环境变量? - kdopen
2
如果你想读取环境变量,只需要使用 os.environ - jme
可能是 https://dev59.com/DW025IYBdhLWcg3wfmLw?rq=1 的重复问题。 - kdopen
2个回答

1

.bashrc应该在登录时自动加载到环境中。

import os

print os.environ

如果你想从bash源文件创建一个值的字典,理论上你可以这样做:

output = subprocess.check_output("source /path/to/.bashrc;env")
env = dict(line.split("=") for line in output.splitlines() if "=" in line))
print env

2
实际上不是这样的,因为当我在Spyder中执行print os.environ['PATH']时,它返回的是/Applications/Spyder.app/Contents/Resources:/usr/bin:/bin:/usr/sbin:/sbin:,而不是我在.bashrc中定义的内容(我使用的是Mac)。问题应该是出在Spyder本身。 - ChrisB
是的,这是因为Spyder可能会为您设置路径... 我猜您可以告诉Spyder如何使用您的.bashrc。 - Joran Beasley
1
谢谢您的回复,Joran。实际上,对于_PATH_变量,它现在可以正常工作了。但是,在Spyder控制台中执行os.environ时,对于_PYTHON_PATH_,我得到了_'PYTHONPATH': '/Applications/Spyder-Py2.app/Contents/Resources'。当我在终端中执行echo $PYTHONPATH时,我得到了 /Applications/Spyder-Py2.app/Contents/Resources:/Applications/Trelis-15.0.app/Contents/MacOS_,这正是我想要的。那么为什么Spyder中的PYTHONPATH没有被我的.bashrc PYTHONPATH覆盖呢? - ChrisB
等一下...谈到了一个.profile,我很确定如果他们是指的.bash_profile,那么它会被说成.bash_profile...不过我可能错了 - Joran Beasley
尝试创建一个.profile文件,然后删除你的.bash_profile...如果Spyder实际上正在覆盖你的Python路径,那肯定是一个错误,应该将其发送给制作Spyder的人。 - Joran Beasley
显示剩余7条评论

0

Shell的启动文件是Shell的启动文件。您真的希望将事物解耦,以便Python不必理解Bash语法,并且从Python中使用的设置不会隐藏在不同实用程序的单块启动文件中。

解决此问题的一种方法是将环境变量放在单独的文件中,并从您的.bashrcsource该文件。然后,当您从Python调用shell时,如果需要,该代码可以source相同的文件。

# .bashrc
source $HOME/lib/settings.sh

# Python >=3.5+ code
import subprocess
subprocess.run(
    'source $HOME/lib/settings.sh; exec the command you actually want to run',
    # Need a shell; need the shell to be Bash
    shell=True, executable='/bin/bash',
    # basic hygiene
    check=True, universal_newlines=True)

(如果您需要与旧版Python兼容,请尝试使用subprocess.check_call(),甚至可以放弃check_变体的保障,而选择使用subprocess.call()以实现与Python 2.4完全兼容。)


我收到以下错误信息:FileNotFoundError: [Errno 2] 没有那个文件或目录:'source ~/.bashrc': 'source ~/.bashrc' - Clément Moissard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接