写入变量时wfile.write返回错误

时间:2012-01-27 13:21:32

标签: python-3.x

我有一个python脚本,我试图设置输出一个json目录列表到网页。我正在取得进步,但现在我已经碰壁了。顺便说一句,我几乎没有python经验。这是我的代码:

if self.path.endswith("/"):
    self.send_response(200)
    self.send_header('Content-type',    'text/plain')
    self.end_headers()
    dirlist = os.listdir
    self.wfile.write(dirlist)
    return

这是我的错误:

  File "C:\Documents and Settings\Admin\Desktop\TiddlyWikis\Songs\Audio\server.p
y", line 18, in do_GET
    self.wfile.write(dirlist)
  File "C:\Python32\lib\socket.py", line 297, in write
    return self._sock.send(b)
TypeError: 'builtin_function_or_method' does not support the buffer interface
顺便说一下,如果你知道一个输出json和所有东西的python脚本,我很乐意使用它,因为我已经没有接近这个了。

4 个答案:

答案 0 :(得分:0)

os.listdir(path)返回一个列表,其中包含path给出的目录中的条目名称。该列表按任意顺序排列。它不包括特殊条目'。'和'..'即使它们出现在目录中 http://docs.python.org/library/os.html#os.listdir

import json

if self.path.endswith("/"):
    self.send_response(200)
    self.send_header('Content-type', 'application/json')
    self.end_headers()
    dirlist = os.listdir('.')   # Change the path here
    self.wfile.write(json.dumps(dirlist))
    return

答案 1 :(得分:0)

好吧,我一点也不知道我做错了什么,但我将list.directory函数从http.py复制到我的脚本中并且它有效。现在我可以在这里工作。

class MyHandler(http.server.SimpleHTTPRequestHandler):
    def list_directory(self, path):
        #list_directory function code

希望发布的内容可以帮助他人。

答案 2 :(得分:0)

首先你忘了打电话给listdir:

dirlist = os.listdir

这将函数 listdir分配给名称dirlist。这不是你想要的,你想得到一个目录中的文件列表。你可以通过调用函数listdir得到它:

dirlist = os.listdir(path)

其中path是您要列出的目录的路径。

其次,您正在尝试将Unicode字符串写入二进制输出。不要自己构造json数据,使用json库。 http://docs.python.org/dev/library/json.html

答案 3 :(得分:-1)

首先尝试显式转换为字符串:

self.wfile.write(str(dirlist))

然后,使用JSON:

self.wfile.write(json.dumps(dirlist))

您只需要格式化dirlist“缓冲区”,以便write()了解如何发送它。