如何将对Google的持续Ping结果写入TXT文件?附现有代码
问题解答
这个需求是能实现的,但你当前的代码存在几个问题,没法达成预期效果:
- 函数名不匹配:线程指定的目标是
ping_anel,但你定义的函数是ping_google subprocess.check_output会等命令跑完才返回结果,而ping -t 8.8.8.8是无限循环的,会一直卡着,根本不会往文件里写东西check_output返回的是字节数据,直接写文件会报错,得转成字符串- 你只创建了线程对象,没调用
t1.start()启动线程,线程根本不会执行
修正后的可用代码
import subprocess import threading def ping_google(command): # 用Popen实时抓输出,stdout=subprocess.PIPE拿到输出流 with subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, shell=True) as proc: # 逐行读输出,实时写入文件 for line in proc.stdout: with open('google.txt', 'a', encoding='utf-8') as f: f.write(line) # 修正函数名,启动线程 t1 = threading.Thread(target=ping_google, args=("ping -t 8.8.8.8",)) t1.start()
关键点说明
- 换成
subprocess.Popen而不是check_output,这样不用等命令结束,能实时读取每一行ping的结果 text=True让输出直接是字符串,不用手动解码字节流stderr=subprocess.STDOUT把ping的错误信息也写入文件,比如网络不通的提示- 逐行读取后立刻写入,保证结果实时保存到文件里
- 必须调用
t1.start(),不然线程只是创建了,不会实际运行
系统适配提醒
- 如果你用Linux或macOS系统,
ping默认就是无限发送的,不需要-t参数,命令改成ping 8.8.8.8就行 shell=True虽然方便直接传命令字符串,但如果命令里有用户输入的内容,会有安全风险。这种情况建议把命令拆成列表:args=(["ping", "-t", "8.8.8.8"],),同时去掉shell=True
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

