我对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执行。