如何知道我是否从 Textmate/emacs 运行 python?

发布于 2024-09-18 13:29:50 字数 584 浏览 4 评论 0原文

我使用 TextMate 来调试 python 脚本,因为我喜欢使用“Command-R”从 TextMate 运行 python 的功能,并且我了解到 emacs 提供了类似的功能。

我需要知道 python 是从命令行运行还是从 TextMate/emacs 运行。我怎样才能做到这一点?

添加

我使用 TextMate 进行 python 编码/调试,它非常有用。但是,有时我需要使用命令行运行测试。我通常使用 TextMate 打开调试/日志记录模式,并使用命令行模式关闭。这就是我问这个问题的原因。另外,我打算使用emacs进行python调试,所以想问一下emacs的情况。

我在 emacs 中得到了答案,并且我碰巧用 TextMate 解决了这个问题。

  1. 在首选项 -> 设置变量高级-> Shell变量,我发现TM_ORGANIZATION_NAME已经在那里可以使用了。所以,我将只使用这个变量。
  2. 使用此变量, if os.environ['TM_ORGANIZATION_NAME']: return True

我猜 TextMate 中的 shell 变量在我使用完后会消失。

I use TextMate to debug python script, as I like the feature of using 'Command-R' for running python from TextMate, and I learned that emacs provide similar feature.

I need to know if the python is run from command line or from TextMate/emacs. How can I do that?

ADDED

I use TextMate for python coding/debugging, and it's pretty useful. But, sometimes I need to run the test using command line. I normally turn on debugging/logging mode with TextMate, and off with command line mode. This is the reason I asked the question. Also, I plan to use emacs for python debugging, so I wanted to ask the case for emacs.

I got an answer in the case with emacs, and I happen to solve this issue with TextMate.

  1. Set variables in Preferences -> Advanced -> Shell Variables, and I found that TM_ORGANIZATION_NAME is already there to be used. So, I'll just use this variable.
  2. Use this variable, if os.environ['TM_ORGANIZATION_NAME']: return True

I guess the shell variable from TextMate disappear when I'm done using it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

压抑⊿情绪 2024-09-25 13:29:50

对于 Emacs:如果 python 作为低级进程运行,则环境变量 INSIDE_EMACS 将被设置。

来自文档:

Emacs设置环境变量
子 shell 中的 INSIDE_EMACS 到
以逗号分隔的列表,包括
Emacs 版本。程序可以检查这个
变量来确定它们是否是
在 Emacs 子 shell 内运行。

For Emacs: If python is run as an inferior process, then the environment variable INSIDE_EMACS will be set.

From docs:

Emacs sets the environment variable
INSIDE_EMACS in the subshell to a
comma-separated list including the
Emacs version. Programs can check this
variable to determine whether they are
running inside an Emacs subshell.

三人与歌 2024-09-25 13:29:50

sys.argv会告诉你Python是如何被调用的。我不了解 TextMate,但是当我告诉 Emacs eval buffer 时,它的值为 ['-c']。根据手册页,这意味着它正在执行指定的命令。如果 Python 直接从不带参数的命令行运行,则 sys.argv 将是 []。如果您运行 python 脚本,它将具有脚本名称以及您传递给它的任何参数。您可能想在 Emacs 中设置 python 模式,而在 TextMate 中等效的操作是在命令行中放置一些特殊的内容,例如 -t

不过,这太黑客了。也许有更好的方法。

sys.argv will tell you how Python was invoked. I don't know about TextMate, but when I tell Emacs to eval buffer, its value is ['-c']. That means it's executing a specified command, according to the man page. If Python's run directly from the command line with no parameters, sys.argv will be []. If you run a python script, it will have the script name and whatever arguments you pass it. You might want to set up your python-mode in Emacs and whatever the equivalent in TextMate is to put something special like -t in the command line.

That's pretty hackish though. Maybe there's a better way.

哎呦我呸! 2024-09-25 13:29:50

来自 sys.path 的文档 :

在程序启动时初始化,
该列表的第一项,path[0],
是包含脚本的目录
用于调用Python
口译员。如果脚本目录
不可用(例如如果
解释器被交互调用
或者如果脚本是从标准读取的
输入),path[0]为空字符串

它指示 Python 搜索模块
首先在当前目录中。注意
脚本目录已插入
在作为 a 插入的条目之前
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',
  ... ]

From the docs for sys.path:

As initialized upon program startup,
the first item of this list, path[0],
is the directory containing the script
that was used to invoke the Python
interpreter. If the script directory
is not available (e.g. if the
interpreter is invoked interactively
or if the script is read from standard
input), path[0] is the empty string
,
which directs Python to search modules
in the current directory first. Notice
that the script directory is inserted
before the entries inserted as a
result of PYTHONPATH.

So

if sys.path[0]:
    # python was run interactively
else:
    # python is running a script.

Or, for example, from the IPython prompt (inside 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',
  ... ]
‖放下 2024-09-25 13:29:50

使用 Command-R 直接运行脚本

使用 Shift-Command-R 从终端运行脚本。

Use Command-R to run the script directly

Use Shift-Command-R to run the script from terminal.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文