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



我对Python和Linux都是新手,因此请尽可能以最少的假设知识进行简单的解释,但是我更愿意投入时间和精力来学习。

我有一个运行Linux的树莓派2 (B型V1.1)。我通过腻子和这个相互作用。

我正在尝试创造一个简单的竞争性反射游戏,由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文件

如果我没有提供足够的信息来帮助你,我很抱歉,如果我没有提供足够的信息来帮助你,我非常感激。

提前感谢!

简短的回答:要么将这些作为python filename.py运行,要么将#!/usr/bin/python行添加到Python脚本的顶部。

长回答:当您在Linux中从命令行运行文件时(树莓派正在运行),默认情况下它假设该文件是shell脚本文件(通常是Bash脚本)。因此,它使用Bash shell(或其他shell,但通常是Bash)来解释文件,而Bash不知道Python语法。如果您想使用不同的解释器(在本例中为Python)运行文件,则必须在文件顶部添加以#!开头的"魔法行"(通常发音为"hash-bang",有时发音为"shebang")。#!字符后面是要使用的解释器的完整路径,例如Python脚本的/usr/bin/python。(你也可以用/usr/bin/env python作为另一个答案;我更喜欢/usr/bin/python,因为这样不可能得到错误的Python解释器。但这是进入高级主题,可能比你现在需要的更多。

所以当你把#!/usr/bin/python行放在Python脚本的顶部时,你告诉Linux系统用哪个解释器来运行程序,然后它应该All Just Work™。

同时,停止使用sudo编辑和运行这些!那简直是自找麻烦。

如果希望这样执行,则需要以下行作为第一行

#!/usr/bin/env python

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

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

$ python test.py

如果你选择这个路径,那么你不需要在脚本本身上授予执行权限。

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

最新更新