Python在非常短的程序中遇到意外的')`

时间:2014-04-04 00:24:36

标签: python invocation env

Python看到了如何使用下面的代码打开文件的问题

if __name__ == "__main__":
    fileName = sys.argv[1]
    with open(fileName, 'r') as f:
       for line in f:
           print line

产生错误

./search.py: line 3: syntax error near unexpected token `('
./search.py: line 3: `  with open(fileName, 'r') as f:'

我错过了一个导入?可能是什么原因造成的?

编辑:操作系统 - CentOS,Python版本2.6.6

我不知道如何安装,我正在从.edu openstack网站运行图像。不确定分发,二进制文件......

3 个答案:

答案 0 :(得分:3)

您必须添加import sys才能使用sys.argv。检查this

我试过这个:

chmod u+x yourfile.py
./yourfile.py

它给了我:

./jd.py: line 4: syntax error near unexpected token `('
./jd.py: line 4: `    with open(fileName, 'r') as f:'

如果您正在执行./search.py file,请在文件的开头#!/usr/bin/env python添加。否则,请使用python file.py input

答案 1 :(得分:2)

问题是你根本不用Python运行你的程序!执行./script时(假设script是文本脚本而不是二进制程序),系统将在序列#!开头的文件顶部查找一行。如果找到该行,则该行的其余部分将用作该脚本的解释器:运行该脚本的程序。如果找不到该行,系统默认为/bin/sh

因此,基本上,通过省略脚本顶部的魔术行#!/usr/bin/python,系统将使用sh运行您的Python脚本,这将产生各种不正确的结果。

然后,解决方案是将行#!/usr/bin/python(或等效行,如#!/usr/bin/env python)添加到Python脚本的顶部,以便系统使用Python运行它。或者,您也可以使用python search.py运行程序,而不是使用./search.py

(请注意,在Linux上,像.py这样的文件扩展名对系统来说几乎没有任何意义。因此,即使它以.py结束,Linux也会像执行{{1}一样执行它}})。

答案 2 :(得分:0)

或者:

  1. search.py​​的第一行应该是#!注释指定查找python可执行文件的路径,通常是[#!/ usr / bin / env python](Why do people write #!/usr/bin/env python on the first line of a Python script? 上最一线对的一-Python的脚本)。通常这是#!/ usr / env / bin python。不要使用硬道路,例如#/选择/ local / bin中/ python2.7

  2. 或者您可以调用python yourfile.py <yourargs> ...


  3. 上一条:如果import sys失败,请发布更多文件。

    也许你的安装搞砸了。

    您可以成功导入其他任何内容,例如import re

    您的平台,操作系统和Python版本是什么?你是怎么安装的?资源?二进制文件?分配?哪些,从哪里来?