我使用TextMate来调试python脚本,因为我喜欢使用'Command-R‘从TextMate运行python的特性,并且我了解到emacs提供了类似的特性。
我需要知道python是从命令行还是从TextMate/emacs运行的。我怎么能这么做?
已添加
我使用TextMate进行python编码/调试,它非常有用。但是,有时我需要使用命令行运行测试。我通常使用TextMate和命令行模式打开调试/日志记录模式。这就是我问这个问题的原因。另外,我计划使用emacs进行python调试,所以我想问一下emacs的情况。
在使用emacs的情况下,我得到了一个答案,我碰巧用TextMate解决了这个问题。
我想TextMate中的shell变量在我使用完之后就会消失。
发布于 2010-09-13 17:59:35
对于Emacs:如果python作为低级进程运行,那么将设置环境变量INSIDE_EMACS
。
从医生那里:
Emacs将子subshell中的环境变量INSIDE_EMACS设置为逗号分隔的列表,包括Emacs版本。程序可以检查此变量以确定它们是否在Emacs子subshell中运行。
发布于 2010-09-13 17:42:06
sys.argv
将告诉您如何调用Python。我不知道TextMate的情况,但是当我告诉Emacs使用eval缓冲区时,它的值是['-c']
。这意味着它正在执行指定的命令,根据手册页。如果Python直接从没有参数的命令行运行,sys.argv
将是[]
。如果运行python脚本,它将有脚本名和传递给它的任何参数。您可能希望在Emacs中设置您的python模式,而在TextMate中任何类似的东西都可以在命令行中放置一些特殊的东西,比如-t
。
不过,这还挺麻烦的。也许还有更好的办法。
发布于 2010-09-13 18:55:47
从医生们到sys.path
在程序启动时初始化时,此列表的第一项path是包含用于调用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',
... ]
https://stackoverflow.com/questions/3702889
复制相似问题