簡體   English   中英

如何知道我是否從Textmate / emacs運行python?

[英]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解決了這個問題。

  1. 在首選項->高級-> Shell變量中設置變量,我發現TM_ORGANIZATION_NAME已經可以使用了。 因此,我將僅使用此變量。
  2. 如果os.environ ['TM_ORGANIZATION_NAME']使用此變量:返回True

我猜想當我使用完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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM