1

我遇到了一些非常奇怪的行为,我希望有人可以向我解释发生了什么。我已经看过官方的 Python 文档,但没有看到任何解释我所看到的东西 - 如果我遗漏了什么,请为我指出。

我有一个(大)python 脚本,它包含价值约 150k 的文本,位于“内容”变量中,并将其上传到远程系统上的 Perl 脚本以进行日志记录。它使用 urllib 来执行此操作:

thash = {'file_name': file_name, 'contents':content}
upload = urlib.urlencode(thash)
post = urlib.urlopen("http://path.to.perl.script/log_writer.pl", upload)
#post.read()

问题是文件“log_writer.pl”写入在看似随机选择的位置被截断,具体取决于“内容”的长度 -除非我在我的 Python 脚本中的 urlopen 调用之后调用 post.read()

我是 Python 新手,对 Perl 还是很陌生,但我的理解是它不应该以这种方式工作。当我在 Python 脚本中本地调用 post.read() 时,为什么远程 Perl 脚本会写入整个文件?

4

1 回答 1

2

您需要在请求之后对“post”中的响应对象执行某些操作。如果您在程序中的该点之后没有对“post”的任何引用(例如 post.read()、post.close() 等),python 将优化它并使响应对象符合垃圾条件在POST 甚至完成之前收集。

请参阅:我应该在 urllib.urlopen() 之后调用 close() 吗?了解更多信息。

于 2015-01-20T06:55:33.670 回答