Python脚本在TextMate中无法运行,在IDLE和Eclipse中正常
我写了下面的代码作为作业,在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 个回答
Textmate这个软件使用的是自带的Python,而不是按照文件开头的那行指示来选择Python版本。你可能需要修改一些代码,才能让它使用正确的Python版本。
你遇到的问题和Python的版本没有关系。问题在于TextMate没有尝试重定向标准输入,所以当你通过TextMate的Python工具包中的Run Script
命令运行时,Python程序会立即看到文件结束的信号。
以前,TextMate在这方面做得比较好,但在OS X 10.6中使用的机制不再有效,因此这个功能被禁用了。一个解决办法是使用Shift-Command-R的Run Script in Terminal
命令。这样,TextMate会打开一个终端窗口,在那里运行脚本,你可以在那个窗口输入内容。
不过,虽然TextMate在正常的Command-R的Run Script
命令中会尊重shebang行,但在Run Script in Terminal
命令中似乎就不这样做了。你可以通过不同的方法自己验证这一点。试着在TextMate中运行以下代码片段:
#! /usr/local/bin/python3
import sys
print(sys.executable)
为了绕过这个问题,你可以在TextMate中设置TM_PYTHON
环境变量。想了解更多细节,可以查看这里的回答。