python程序如何判断它是否在emacs中运行?

问题描述:

我通常在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(),我不知道你聪明的人可以帮忙。

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

一种方法是检查是否存在环境变量,如EMACSPATHEMACSLOADPATH。另外,根据您在Emacs中如何启动Python,TERM环境变量的值可能会给您一个有用的线索。