[英]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.