我通常在emacs中编写python。
我经常想重新评估我的文件,我可以使用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()
感到有些困惑,我想知道你们是否能够提供帮助。
答案 0 :(得分: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]
答案 1 :(得分:2)
一种选择是检查是否存在EMACSPATH
或EMACSLOADPATH
等环境变量。另外,根据你在Emacs中启动Python的方式,TERM
环境变量的值可能会给你一个有用的线索。