2013-03-30 175 views
1

我正在使用OS X 10.8.3。python中的PATH環境變量

如果你打開一個終端,

echo $PATH 

在/ usr/local/bin目錄是存在的,如果你還通過sh或bash的運行

不過的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 
) 
+2

嘗試'print os.environ ['PATH']' – suspectus

回答

3

終端窗口主機交互式shell,通常爲bash。使用各種配置文件和「rc」文件來初始化殼體,如手冊頁所記錄(例如bash)。初始化將以多種方式改變環境。

特別是,/etc/profile運行path_helper工具將目錄添加到PATH變量。

從Finder,Dock,Launchpad等啓動的應用程序不運行shell並且沒有類似的環境。他們從父進程繼承了一個相當基礎的環境,最終回到啓動階段。例如,請參閱launchctl export的輸出。您也可以使用Automator,AppleScript編輯器或第三方工具Platypus從GUI應用程序運行env命令,以查看它有什麼。

我不確定Linux shell的標準是什麼,但同樣的原則適用。從桌面環境啓動的程序將直接繼承環境。殼將使用各種腳本文件初始化其環境,因此可能有不同的環境。