./xx.py:line 1:import:未找到命令

时间:2014-03-08 21:31:35

标签: python url

我正在尝试使用此Python urllib2 Basic Auth Problem位代码从需要身份验证的网址下载网页内容。我正在尝试的代码是:

 import urllib2, base64

request = urllib2.Request("http://api.foursquare.com/v1/user")
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)   
result = urllib2.urlopen(request)

它告诉我:

./xx.py: line 1: import: command not found
./xx.py: line 3: syntax error near unexpected token `('
./xx.py: line 3: `request = urllib2.Request("http://api.foursquare.com/v1/user")'

我想知道我做错了什么?我正在使用Python 2.7.5。如何从需要身份验证的URL下载文件内容?

6 个答案:

答案 0 :(得分:44)

这不是第一步与身份验证相关的问题。您的import无效。所以,试着在第一行写这个:

#!/usr/bin/python

并暂时使用

运行
python xx.py

对你来说这是一个解释:

>>> abc = "Hei Buddy"
>>> print "%s" %abc
Hei Buddy
>>> 

>>> print "%s" %xyz

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    print "%s" %xyz
NameError: name 'xyz' is not defined

首先,我初始化了abc变量,它运行正常。另一方面,xyz不起作用,因为它没有初始化!

答案 1 :(得分:9)

您使用的是基于UNIX的操作系统,例如Linux吗?如果是这样,请在脚本的最顶部添加 shebang 行:

#!/usr/bin/python

在其下方,您将获得已有的其余代码(在您的情况下为xx.py)。然后在终端运行相同的命令:

$ python xx.py

这应该可以正常工作,因为它现在将其解释为Python代码。但是,当从终端运行时,这并不重要,因为python告诉如何在这里解释它。它允许你做的是在终端外执行它,即从文件浏览器执行它。

答案 2 :(得分:4)

当您看到&#34; import:命令未找到&#34;在第一次导入时,它是由解析器不使用与py文件匹配的字符编码引起的。特别是当您不在py文件中使用ASCII编码时。

正确的方法是在py文件的顶部指定正确的编码,以匹配您的文件字符编码。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os

答案 3 :(得分:1)

如果您直接运行脚本,例如./xx.py,并且您的脚本在顶部没有诸如#!/usr/bin/env python之类的shebang,那么您的shell可能会将其作为shell脚本执行。 POSIX says

  

如果execl()函数由于等效的错误而失败   系统接口卷中定义的[ENOEXEC]错误   POSIX.1-2008,shell应该执行一个等同于一个命令的命令   shell使用搜索结果生成的路径名作为第一个调用   操作数,除了传递给新shell的任何剩余参数   可以将新shell中的“$ 0”值设置为该命令   名称。如果可执行文件不是文本文件,则shell可能会绕过   这个命令执行。在这种情况下,它应写一条错误信息,   并应退回126的退出状态。

注意:如果您的文本文件没有shebang,则可能会获得ENOEXEC

如果没有shebang,shell会尝试将您的Python脚本作为shell脚本运行,从而导致错误:import: command not found

此外,如果您将脚本作为python xx.py运行,那么您不需要shebang。您甚至不需要它可执行(+x)。在这种情况下,您的脚本由python解释。

在Windows上,除非pylauncher is installed,否则不会使用shebang。它是included in Python 3.3+

答案 4 :(得分:1)

我遇到了同样的问题,现在我找到了解决这个问题的方法。

#!/usr/bin/python

import sys
import os

os.system('meld "%s" "%s"' % (sys.argv[2], sys.argv[5]))

这是我案例的代码[1]。当我尝试这个脚本时,我收到了如下错误消息:

  

导入:未找到命令

我发现人们谈论了shebang。如你所见,我上面的python代码中有shebang。 我尝试了这些和那些试验,但没有找到一个好的解决方案。

我终于试着打电话给我自己。

#!/usr/bin/python

并删除了复制的。

我的问题解决了!!!

我从互联网上复制了代码[1]。

我猜在原始复制的shebang声明中有一些看不见的(?)看不见的特殊字符。

我使用vim,有时我会遇到类似的问题。特别是当我从互联网上复制一些代码片段时,会出现这种问题..网页上有一些病毒特殊字符!!我怀疑。 : - )

Journeyer

PS)我将Windows 7中的代码 - 主机操作系统 - 复制到Windows剪贴板中并将其粘贴到我在vbu中的Ubuntu - 来宾操作系统中。 VM是Oracle虚拟机。

[1] http://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy

答案 5 :(得分:1)

大概是Shebang

#!usr/bin/python

这将告诉哪个解释器唤醒以运行文件中写的代码。