我正在使用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
)
答案 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将使用各种脚本文件初始化其环境,因此可能具有不同的环境。