python中的PATH环境变量

时间:2013-03-30 09:47:37

标签: python linux macos

我正在使用OS X 10.8.3。

如果您打开终端,

echo $PATH
如果你通过sh或bash

运行它,那么

/ usr / local / bin就在那里

然而python代码输出:

import os
print os.environ.copy()

缺少/ usr / local / bin路径

任何人都可以解释$ PATH的工作原理吗?是否存在扩展它的东西?为什么python脚本没有打印我在终端中看到的$ PATH?它在Linux发行版上的行为是否相同?

我是怎么遇到的?我安装了一个sublime 2插件,js2coffee,插件运行一个子进程(import subprocess),提供一个exec的名称,js2coffee - 位于/ usr / local / bin中,一个不在python os env中的路径。为了解决这个问题,我不得不将它添加到env:

env = os.environ.copy()
env["PATH"] = "/usr/local/bin/"

js2coffee = subprocess.Popen(
    'js2coffee',
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    shell=True,
    env= env
)

1 个答案:

答案 0 :(得分:3)

终端窗口托管交互式shell,通常为bash。使用各种配置文件和“rc”文件初始化shell,如其手册页(例如bash)中所述。初始化将以各种方式改变环境。

特别是,/etc/profile运行path_helper工具将目录添加到PATH变量。

从Finder,Dock,Launchpad等启动的应用程序不运行shell,也没有类似的环境。他们从父进程继承了一个相当基本的环境,最终回到了launchd。例如,请参阅launchctl export的输出。您还可以使用Automator,AppleScript编辑器或第三方工具Platypus从GUI应用程序运行env命令,以查看它具有的功能。

我不确定Linux shell的标准是什么,但同样的原则适用。从桌面环境启动的程序将直接继承环境。 Shell将使用各种脚本文件初始化其环境,因此可能具有不同的环境。