Python脚本在TextMate中无法运行,在IDLE和Eclipse中正常

1 投票
2 回答
3205 浏览
提问于 2025-04-16 08:56

我写了下面的代码作为作业,在IDLE和Eclipse中运行得很好,都是用Python 3。

不过,我尝试在TextMate中运行它,添加了新的一行代码来指向Mac上的Python 3。看起来它确实在运行Python 3,但却返回了一个错误。错误信息是:EOFError: EOF when reading a line。这是指代码中的第5行。

有人知道这是为什么吗?

顺便说一下,这个TextMate的问题和作业无关,所以我不是在寻求作业帮助。我只是想弄清楚如何在TextMate中使用Python 3。

#! /usr/local/bin/python3
#
# Tests user string against two conditions.
#
user_string = input("Enter a string that is all upper case and ends with a period: ")
if user_string.isupper() and user_string.endswith("."):
    print("Your string met both conditions.")
else:
    if user_string.isupper():
        print("Your string does not end with a period.")
    elif user_string.endswith("."):
        print("Your string is not all upper.")
    else:
        print("Your string failed both conditions.")

2 个回答

0

Textmate这个软件使用的是自带的Python,而不是按照文件开头的那行指示来选择Python版本。你可能需要修改一些代码,才能让它使用正确的Python版本。

2

你遇到的问题和Python的版本没有关系。问题在于TextMate没有尝试重定向标准输入,所以当你通过TextMate的Python工具包中的Run Script命令运行时,Python程序会立即看到文件结束的信号。

以前,TextMate在这方面做得比较好,但在OS X 10.6中使用的机制不再有效,因此这个功能被禁用了。一个解决办法是使用Shift-Command-RRun Script in Terminal命令。这样,TextMate会打开一个终端窗口,在那里运行脚本,你可以在那个窗口输入内容。

不过,虽然TextMate在正常的Command-RRun Script命令中会尊重shebang行,但在Run Script in Terminal命令中似乎就不这样做了。你可以通过不同的方法自己验证这一点。试着在TextMate中运行以下代码片段:

#! /usr/local/bin/python3
import sys
print(sys.executable)

为了绕过这个问题,你可以在TextMate中设置TM_PYTHON环境变量。想了解更多细节,可以查看这里的回答

撰写回答