Python 大佬们看下这个脚本有什么问题吗?

2020-11-02 10:45:37 +08:00
 madlifer

在改一个扫国内 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

https://paste.ubuntu.com/p/bMhWWGdbHT/

2138 次点击
所在节点    Python
8 条回复
frostming
2020-11-02 10:59:32 +08:00
最关键的能知道错误是什么的地方,恰恰被你忽略了
try:
checkServer(host)
except:
continue

请问,如果全都掉进 except 里面去了,你如何知道发生了什么错误,这时 file 里面会写内容吗
singerll
2020-11-02 11:19:44 +08:00
open 方法应该用的不是 w,是 a 吧,w 好像是清空后写入。记不清了我不是专业 python
lpts007
2020-11-02 11:24:34 +08:00
按理说第二个命令有可能会卡住,结束不了吧。

queue. get(blocking=false)
madlifer
2020-11-02 11:27:50 +08:00
@frostming 谢谢老哥. 这个代码是我拿来后改的, 原因找到了,最大的问题是忘了把文件关闭,导致不结束程序不写入数据。 数据量小的时候很快就跑完一次性写入了,数据量大的时候很容易写不进去
madlifer
2020-11-02 11:29:15 +08:00
@lpts007 是的 我一直在奇怪..明明设置了超时为啥有的时候会卡住。 我不是很懂代码,改上去试试
renmu123
2020-11-02 11:31:18 +08:00
该升级 Python3 了
xichuhanguguan
2020-11-02 11:42:55 +08:00
write 并没有把数据写进文件,只是在缓存当中,你需要 flush 这个方法强制把缓存中的数据写入到文件中
wangchonglie
2020-11-02 12:42:53 +08:00
建议使用 with 语句

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/720903

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX