我正在尝试使用此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不起作用,因为它没有初始化!
您使用的是基于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告诉如何在这里解释它.它允许你做的是在终端外执行它,即从文件浏览器执行它.
如果您直接运行脚本,例如,./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+ 中。
当您在第一次导入时看到“导入:找不到命令”时,是由于解析器未使用与py文件匹配的字符编码引起的。尤其是当您在py文件中不使用ASCII编码时。
正确处理此问题的方法是在py文件顶部指定正确的编码,以匹配文件字符编码。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77794 次 |
| 最近记录: |