[英]PATH environment variable in python
我正在使用OS X 10.8.3。
如果你打開一個終端,
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
)
終端窗口托管交互式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將使用各種腳本文件初始化其環境,因此可能具有不同的環境。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.