为了账号安全,请及时绑定邮箱和手机立即绑定

我有插座和泡菜的问题。值不保存到 txt

我有插座和泡菜的问题。值不保存到 txt

慕村9548890 2022-06-22 16:34:24
我的 Python 代码的想法是从网络套接字读取值,并用 pickles 将值保存在 txt 文件中,以供以后在另一个应用程序中使用。它不一定必须是 txt 文件,但它是我正在尝试使用的。通信工作得很好,他创建了 txt 文件,但遗憾的是没有记录任何内容。有人可以帮助我。谢谢。服务器代码:import socketimport pickleHOST = ''              PORT = 5000            tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)orig = (HOST, PORT)tcp.bind(orig)tcp.listen(10)filename = 'data.txt'while True:    con, cliente = tcp.accept()    print('connector by', cliente)    while True:        msg = con.recv(4096)        if not msg: break        print(msg)    with open(filename, 'wb') as f:        pickle.dumps(msg, f)    print('Ending client connection', cliente)    con.close()客户代码:import socketHOST = '10.0.0.120'PORT = 5000tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)dest = (HOST, PORT)tcp.connect(dest)print('to exit press CTRL+C\n')msg = input()while msg != '\x18':    msg = input()    tcp.sendall(msg.encode('utf8'))tcp.close()
查看完整描述

2 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

你使用了错误的方法。pickle.dumps产生一个字符串并且不接受文件参数。实际上,您应该从该代码中得到一个异常:


TypeError: an integer is required (got type _io.BufferedWriter)


如果您更改代码以使用pickle.dump它,它可以正常工作,因为这是转储到文件的正确方法。这是一个演示它工作的示例(不需要套接字,因为这是关于如何pickle工作,而不是关于网络)。


import pickle


foo = b'Some test string'

print("Pickling string '{}'".format(foo))


with open("/tmp/test.pickle", "wb") as tfile:

    pickle.dump(foo, tfile)


with open("/tmp/test.pickle", "rb") as tfile:

    bar = pickle.load(tfile)


print("Reloaded string '{}'".format(bar))

# Confirm they're identical

assert foo == bar


查看完整回答
反对 回复 2022-06-22
?
忽然笑

TA贡献1806条经验 获得超5个赞

这里:


while True:

        msg = con.recv(4096)

        if not msg: break

        print(msg)


with open(filename, 'wb') as f:

        pickle.dumps(msg, f)

当且仅当 到达打开文件的代码bool(msg) is False,因为这是while True循环终止的时间,如下所述:if not msg: break。


所以msg == '',最后你写的是空字符串


查看完整回答
反对 回复 2022-06-22
  • 2 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信