2012-03-24 113 views
4

我通常在emacs中編寫python。python程序如何判斷它是否在emacs中運行?

我經常想要重新評估我的文件,我可以使用Ctrl-C Ctrl-C做到這一點,這會導致解釋器重新載入整個文件,然後我可以繼續播放。

,所以如果我正在寫一個程序,它輸入,我通常會用兩行發現自己:

lines = open("/home/jla/inputfile").readlines() 
#lines = fileinput.input() 

,第一行是「同時發展做什麼」(從已知例如閱讀輸入文件) 第二個是(從標準輸入讀取,或提供的文件名)

顯然,這是不好的「在命令行運行時做什麼」,所以我想:

if in_emacs(): 
    lines = open("/home/jla/inputfile").readlines() 
if run_from_shell(): 
    lines = fileinput.input() 
else: 
    oops() 

我知道如何寫oops(),但我有點卡住in_emacs()run_from_shell(),我不知道你聰明的人可以幫忙。

回答

10

emacs打開的shell應該有環境變量EMACS=t。至少這對我的emacs,YMMV有效。

如果這不適合你,下面是如何找出python可以看到的依賴emacs的環境變量。從shell和emacs下運行,並比較輸出。

import os 
for e in os.environ: 
    if 'EMACS' in e: 
     print e, os.environ[e] 
+0

就這樣,在很多語言裏,我已經有些煩人的東西已經過時了。很簡單。非常感謝你! – 2012-03-24 09:08:25

+0

使用'Mx shell-command'時不起作用,只需要嘗試'M-!',然後輸入命令'python -c「import os; print [k for k in os.environ.keys ()如果k.startswith('EMACS')]「'。對我來說,結果是'['EMACSPATH','EMACSLOADPATH','EMACSDOC','EMACSDATA']'。變量'EMACSPATH'(在我的答案中提到)被設置在shell和一次性命令中,因此可能比'EMACS'更好。 – sanityinc 2012-03-25 19:01:22

2

一種方法是檢查是否存在環境變量,如EMACSPATHEMACSLOADPATH。另外,根據您在Emacs中如何啓動Python,TERM環境變量的值可能會給您一個有用的線索。

相關問題