私はネットワークソケットを介して相互に通信するサーバーとクライアントプログラムを持っています。ネットワークソケット経由で送信するPythonのscandir.DirEntryをシリアル化する方法は?
私がしたいのは、scandir.scandir()
から得られたディレクトリエントリ(scandir.DirEntry
)をソケット経由で送信することです。どのように
File "untitled.py", line 5, in <module>
data = pickle.dumps(item)
File "C:\Python27\Lib\pickle.py", line 1374, in dumps
Pickler(file, protocol).dump(obj)
File "C:\Python27\Lib\pickle.py", line 224, in dump
self.save(obj)
File "C:\Python27\Lib\pickle.py", line 306, in save
rv = reduce(self.proto)
File "C:\Python27\Lib\copy_reg.py", line 70, in _reduce_ex
raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle DirEntry objects
:
import scandir, pickle
s = scandir.scandir("D:\\PYTHON")
entry = s.next()
data = pickle.dumps(entry)
しかし、私は次のエラー・スタックを取得しています:今、私はpickle
とcPickle
モジュールを使用していて、次の(のみ抜粋)が出ているために
このエラーを取り除くことはできますか?
私はmarshall
またはJSON
を使用して聞いたことがあります。 更新:JSON
は、オブジェクト内のすべてのデータをダンプしていません。
オブジェクトをソケット経由で送信する方法はまったく異なりますか?
ご協力いただきありがとうございます。
:
そして:
組み合わせ、それは次のようになりますか? –
@SimonBlack:まさに、私はアクセス可能なデータだけを送ることによって部分的にそれを見つけました。しかし、 'is_dir()'のような、クラスのメソッドの動作をエミュレートする方法はありますか?この 'is_dir()'メソッドの実際のデータはどこにありますか? –