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


问题内容

我为作业分配了以下内容,并且在运行Python 3的IDLE和Eclipse中可以正常工作。

但是,我尝试通过TextMate的新行1(在这里找到)运行它,以将其指向Mac上的Python 3。它似乎正在运行Python
3,但返回错误。它说:EOFError:读一行时EOF。它指的是下面的第5行。

有人知道为什么吗?

顺便说一句,此TextMate问题不是作业分配的一部分,因此,我不是在寻求作业帮助。我只想弄清楚如何在Python 3中使用TextMate。

#! /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.")

问题答案:

您看到的问题与Python版本无关。问题在于TextMate不会尝试重定向标准输入,因此,当您通过TextMate的Python bundleRun Script命令运行时,Python程序会立即看到文件结尾。
如此处所述,TextMate以前对此比较幻想,但是它使用的机制在OS X 10.6中不再起作用,因此该功能被禁用。

一种解决方案是使用TextMate的Python软件包中的 Shift-Command-R Run Script in Terminal命令。这将导致TextMate打开一个终端窗口并在其中运行脚本,您可以在此处输入输入。不幸的是,尽管TextMate确实使用普通的
Command-R 尊重了shebang行Run Script command,但似乎并没有使用该Run Script in Terminal命令。您可以通过多种方式验证自己。尝试在TextMate中运行以下代码片段:

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

为了解决这个问题,您可以TM_PYTHON在TextMate中设置环境变量。有关如何执行此操作的更多详细信息,请参见此处的答案