繁体   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