我是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文件
对于可能导致此问题的任何见解都非常感激,如果我没有提供足够的信息对您有用,我深表歉意。
提前致谢!
答案 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执行脚本。