【问题标题】:Unable to run .py file from putty, Syntax error: word unexpected (expecting ")")无法从 putty 运行 .py 文件,语法错误:单词意外(预期为“)”)
【发布时间】:2016-01-09 14:29:29
【问题描述】:

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

我有一个运行 Linux 的 Raspberry Pi 2(B 型 V1.1)。我通过 putty 与这个 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文件

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

提前致谢!

【问题讨论】:

    标签: python linux raspberry-pi sudo chmod


    【解决方案1】:

    简答:要么以python filename.py 运行它们,要么将#!/usr/bin/python 行添加到Python 脚本的顶部。

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

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

    另外,停止使用 sudo 来编辑和运行这些!那只是自找麻烦。

    【讨论】:

    • 啊。打败我...+1
    • 您好,感谢您详细(而且快速!)的回复。我在离开大学时就发布了这个,当我回家时会测试它,然后在这里更新我是怎么走的。再次感谢!
    • 这正是我的问题,我的代码现在可以完美运行,再次感谢您的详细而翔实的回复!
    【解决方案2】:

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

    #!/usr/bin/env python
    

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

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

    $ python test.py
    

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

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

    【讨论】:

    • 也给了你一个 +1,因为你的答案和我的一样好。 (虽然现在我的可能好一点,因为我花了一些时间来解释发生了什么,因为 OP 是 Linux 的新手)。
    • 感谢您的回复,在您和 iLoveTux 分享相同的智慧之间,我确信这将在我回到家后解决我的问题,再次感谢 :)
    • 糟糕,我把你的用户名弄混了,我不应该一边走路一边打字抱歉
    • @Ruthenium66 - 没问题,我们明白你的意思。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2019-03-27
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多