[英]How to know if I run python from Textmate/emacs?
我使用TextMate調試python腳本,因為我喜歡使用'Command-R'從TextMate運行python的功能,並且我了解到emacs提供了類似的功能。
我需要知道python是從命令行運行還是從TextMate / emacs運行。 我怎樣才能做到這一點?
我使用TextMate進行python編碼/調試,這非常有用。 但是,有時我需要使用命令行來運行測試。 我通常使用TextMate打開調試/記錄模式,並使用命令行模式關閉。 這就是我問這個問題的原因。 另外,我計划使用emacs進行python調試,因此我想詢問emacs的情況。
對於emacs,我得到了答案,而我碰巧用TextMate解決了這個問題。
我猜想當我使用完TextMate的shell變量后,它就會消失。
對於Emacs:如果python作為劣等程序運行,則將設置環境變量INSIDE_EMACS
。
從文檔:
Emacs將子外殼程序中的環境變量INSIDE_EMACS設置為以逗號分隔的列表,其中包括Emacs版本。 程序可以檢查此變量以確定它們是否在Emacs子外殼中運行。
sys.argv
將告訴您如何調用Python。 我不了解TextMate,但是當我告訴Emacs使用eval緩沖區時,其值為['-c']
。 根據手冊頁,這意味着它正在執行指定的命令。 如果Python在不帶參數的情況下直接從命令行運行,則sys.argv
將為[]
。 如果運行python腳本,它將具有腳本名稱以及您傳遞的任何參數。 您可能要在Emacs中設置python-mode,而TextMate中的等效選項是在命令行中添加-t
之類的特殊內容。
不過,這確實有點駭人聽聞。 也許有更好的方法。
從sys.path
的文檔中:
在程序啟動時初始化后,該列表的第一項path [0]是包含用於調用Python解釋器的腳本的目錄。 如果腳本目錄不可用(例如, 如果解釋器是交互式調用的,或者從標准輸入中讀取了腳本),則path [0]是空字符串 ,它指示Python首先在當前目錄中搜索模塊。 請注意,由於PYTHONPATH的結果,在插入條目之前插入了腳本目錄。
所以
if sys.path[0]:
# python was run interactively
else:
# python is running a script.
或者,例如,從IPython提示符(在Emacs內部):
In [65]: sys.path
Out[65]:
['', <-------------------- first entry is empty string
'/usr/bin',
'/usr/local/lib/python2.6/dist-packages/scikits.statsmodels-0.2.0-py2.6.egg',
'/usr/local/lib/python2.6/dist-packages/pyinterval-1.0b21-py2.6-linux-i686.egg',
... ]
使用Command-R直接運行腳本
使用Shift-Command-R從終端運行腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.