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

use*_*422 19 python url

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

 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)
Run Code Online (Sandbox Code Playgroud)

它告诉我:

./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")'
Run Code Online (Sandbox Code Playgroud)

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

Sha*_*mun 48

这不是第一步与身份验证相关的问题.你import不行.所以,尝试在第一行写这个:

#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

并暂时使用

python xx.py
Run Code Online (Sandbox Code Playgroud)

对你来说这是一个解释:

>>> 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
Run Code Online (Sandbox Code Playgroud)

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

  • 没有必要**同时**添加 shebang 并显式调用解释器。因此,我不确定这是否真的是好的建议。 (2认同)

Ale*_*ton 9

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

#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

在其下面你将拥有你已经拥有的其余代码(xx.py在你的情况下).然后在终端运行相同的命令:

$ python xx.py
Run Code Online (Sandbox Code Playgroud)

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


jfs*_*jfs 5

如果您直接运行脚本,例如,./xx.py并且您的脚本没有 shebang(例如#!/usr/bin/env python在最顶部),那么您的 shell 可以将其作为 shell 脚本执行。POSIX 说

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

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

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

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

在 Windows 上,除非安装了 pylauncher,否则不会使用 shebang 。它包含在 Python 3.3+ 中


Li *_* Li 5

当您在第一次导入时看到“导入:找不到命令”时,是由于解析器未使用与py文件匹配的字符编码引起的。尤其是当您在py文件中不使用ASCII编码时。

正确处理此问题的方法是在py文件顶部指定正确的编码,以匹配文件字符编码。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
Run Code Online (Sandbox Code Playgroud)