在改一个扫国内 Cloudfront 节点的 python 脚本,遇到了个搞不懂的问题:
核心脚本截图如下:
现在的问题是,如果数据量很少,就可以输出的 result.txt 中
比如:
python 1.py ip.txt 800 #1.py 是脚本文件名 ip.txt 是 ip 地址 800 是线程
ip.txt 中 只有几十个 ip 地址的时候 是可以正常输出的。
但是如果数据量比较大,比如:
python 1.py ip-new.txt 800
result.txt 中就完全是空的,不会进行输出
求 Ptyhon 大佬告知是为什么? 完整代码在 pastebin
1
frostming 2020-11-02 10:59:32 +08:00 1
最关键的能知道错误是什么的地方,恰恰被你忽略了
try: checkServer(host) except: continue 请问,如果全都掉进 except 里面去了,你如何知道发生了什么错误,这时 file 里面会写内容吗 |
2
singerll 2020-11-02 11:19:44 +08:00 via Android
open 方法应该用的不是 w,是 a 吧,w 好像是清空后写入。记不清了我不是专业 python
|
3
lpts007 2020-11-02 11:24:34 +08:00 via Android
按理说第二个命令有可能会卡住,结束不了吧。
queue. get(blocking=false) |
4
madlifer OP @frostming 谢谢老哥. 这个代码是我拿来后改的, 原因找到了,最大的问题是忘了把文件关闭,导致不结束程序不写入数据。 数据量小的时候很快就跑完一次性写入了,数据量大的时候很容易写不进去
|
6
renmu123 2020-11-02 11:31:18 +08:00
|
7
xichuhanguguan 2020-11-02 11:42:55 +08:00
write 并没有把数据写进文件,只是在缓存当中,你需要 flush 这个方法强制把缓存中的数据写入到文件中
|
8
wangchonglie 2020-11-02 12:42:53 +08:00
建议使用 with 语句
|