无法从putty运行.py文件,语法错误:单词意外(期待")")

时间:2015-10-12 07:33:26

标签: python linux raspberry-pi sudo chmod

我是Python和Linux的新手,因此请求尽可能少的假设知识的简单解释,但是我非常愿意花时间和精力去学习。

我有运行Linux的Raspberry Pi 2(Model B V1.1)。我通过腻子与这个pi互动。

我正在尝试创建一个简单的竞争反射游戏,包括2个按钮和一个LED。我的目标是让LED在短暂的间隔后点亮,第一个按下按钮的玩家获胜。

我正在用python(特别是2.7.3)

编写脚本

我的问题是我无法从putty中运行任何.py文件,我总是收到同样的错误:

Syntax error: word unexpected (expecting ")")

为了确定问题是否是我的代码中的错误,我创建了一个非常简单的.py文件,以检查是否发生了相同的错误,并且确实发生了。所以我现在相信,即使我的代码功能正常,有些东西阻止我运行任何.py文件。

我正在使用的流程如下:

首先我从putty中创建一个新的python文件:

sudo nano test.py

接下来我输入我的python代码(现在非常简单,因为我无法运行任何.py文件)

for each in range(5):
    print 'hello'

然后按CTRL + O编写文件,按Enter键,然后按CTRL + X退出

最后,我使用

使文件可执行
sudo chmod u+x test.py

并尝试运行它

sudo ./test.py

再次发生类似的错误

Syntax error: "(" unexpected

然后我决定使用

将代码直接输入到python shell中
sudo python

>>>for each in range(5):
...    print 'hello'

这次输出是期望的结果:

hello
hello
hello
hello
hello

所以直接从shell执行python代码没有问题,我只是无法执行任何以前保存的.py文件

对于可能导致此问题的任何见解都非常感激,如果我没有提供足够的信息对您有用,我深表歉意。

提前致谢!

2 个答案:

答案 0 :(得分:8)

简短回答:将它们作为python filename.py运行,或者将行#!/usr/bin/python添加到Python脚本的顶部。

答案很长:当你从Linux的命令行运行一个文件(这是运行Raspberry Pi的文件)时,默认情况下它假定该文件是一个shell脚本文件(通常是Bash脚本)。所以它使用Bash shell(或其他一些shell,但它通常是Bash)来解释文件,而Bash不知道Python语法。如果你想使用不同的解释器(在这种情况下是Python)运行你的文件,你必须在文件顶部添加一个“魔术行”,以#!开头(通常发音为“hash-bang”,有时简称“shebang”。 #!个字符后面是要使用的解释器的完整路径,例如{1}用于Python脚本。 (您也可以使用/usr/bin/python作为另一个建议的答案;我更喜欢/usr/bin/env python,因为不可能以这种方式获得错误的Python解释器。但是,这可能会超出您现在所需的高级主题。 )

因此,当您将行/usr/bin/python放在Python脚本的顶部时,您告诉Linux系统哪个解释器运行该程序,然后它应该是All Just Work™。

此外,停止使用sudo编辑并运行这些!那只是在寻找麻烦。

答案 1 :(得分:4)

如果你想这样执行,你需要以下一行作为第一行

#!/usr/bin/env python

这将告诉bash(或等效的)使用Python解释器执行该文件。

如果您不想这样做,那么您可以像这样执行脚本:

$ python test.py

如果你走这条路线,那么你不需要为脚本本身授予执行权限。

此外,除非绝对必要,否则不应使用sudo执行脚本。