1

我为家庭作业编写了以下内容,它在运行 Python 3 的 IDLE 和 Eclipse 中运行良好。

但是,我尝试使用新的第 1 行(我在此处找到)从 TextMate 运行它,以将其指向 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.")
4

2 回答 2

2

您看到的问题与 Python 版本无关。问题是 TextMate 不会尝试重定向标准输入,因此,当您通过 TextMate 的 Python 捆绑Run 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 中设置环境变量。有关如何执行此操作的更多详细信息,请参见此处的答案。

于 2010-12-23T08:32:01.767 回答
0

Textmate 使用的是内置的 Python,而不是尊重 shebang 行。您可能必须破解捆绑代码才能使用正确的 python。

于 2010-12-23T06:27:09.507 回答