You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:20:25