2012-01-27 18 views
0

ウェブページにjsonディレクトリのリストを出力するように設定しようとしているPythonスクリプトがあります。私は進歩を遂げているが、今は壁に向かって走っている。ところで、私はほとんどPythonの経験がありません。ここに私のコードは次のとおりです。変数を書き込むときにwfile.writeがエラーを返す

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スクリプトを知っていれば、私はちょうど使用して喜んでいると思いますそれで、私はこれで終わりが近づいていないからです。

答えて

0

まあ、私は私が間違って何をやっていたわずかなアイデアを持っていないが、私は私のスクリプトにhttp.pyからlist_directory機能をコピーし、それが動作します。今私はここから作業することができます。

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

うまくいけば、投稿されたものは他人を助けることができます。

-1

明示的に最初の文字列に変換してみてください。

self.wfile.write(str(dirlist)) 

その後、JSONで:

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

は、あなただけのdirlistに書式を設定(つまり書き込みして "バッファ" する必要がありますが)を送信する方法を理解しますそれ。

+0

'json.dumps'を使用して、私は' TypeError:<組み込み関数listdir>がJSONのシリアライズ可能ではありません。 'str'は' TypeError: 'str'はバッファインタフェースをサポートしていません。 –

+0

もう一つの答えが指摘しているように、 'dirlist = os.listdir()'の代わりに 'dirlist = os.listdir'を実行したからです。 –

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 
+0

私はこのエラーが発生します: 'TypeError: 'str'はバッファインターフェイスをサポートしていません。何が問題になる可能性がありますか? –

+0

これを試してください 'self.wfile.write(buffer(json.dumps(dirlist)))' – Insidi0us

+0

@ArlenBeiler: 'self.wfile.write(json.dumps(dirlist).encode( 'utf8'))')を試してください。もちろん、あなたは* utf-8 *の代わりに他のエンコーディングを使うことができます – avtomaton

0

は、まずあなたはLISTDIRに電話をするのを忘れた:

dirlist = os.listdir 

これは、名前dirlistにに機能 LISTDIRを割り当てます。それはあなたが望むものではなく、ディレクトリ内のファイルのリストを取得したいのです。関数listdirを呼び出すことでそれを得ることができます。

dirlist = os.listdir(path) 

ここで、pathは、リストするディレクトリへのパスです。

第2に、バイナリ出力にUnicode文字列を書き込もうとしています。 jsonデータを自分で作成しないでください.jsonライブラリを使用してください。 http://docs.python.org/dev/library/json.html

関連する問題