【问题标题】:Speedtest python script速度测试python脚本
【发布时间】:2022-02-24 14:58:23
【问题描述】:

您好,我是 python 新手,我正在尝试使用 python 从 (speedtest.net) 获取数据进行速度测试。我一直在查看 git hub 并找到了 speedtest-cli。但它有很多我不需要的功能。我只想制作一个可以运行 3 次的简单脚本。我找到了一些 API,但我不确定如何将其修改为循环 3 次。任何帮助将不胜感激。提前致谢

import speedtest

servers = []
# If you want to test against a specific server
# servers = [1234]
x=0
for x in range(0, 2):
    s = speedtest.Speedtest()
    s.get_servers(servers)
    s.get_best_server()
    s.download()
    s.upload()
    s.results.share()
    results_dict = s.results.dict()

【问题讨论】:

  • 试试for x in range(0,3)
  • 或只是for x in range(3)range(start, end, step) - start 包括和 end 专门。检查docs
  • 我已经试过了,问题是它根本不循环。它只输出一次结果。
  • 如果我们不知道发生了什么,我们无能为力......在你的问题中你只说make a simple script that will run 3 times。如果范围不是真正的问题,至少告诉我们你遇到了什么样的错误
  • 我认为问题在于您正在查看在每个循环中重置的 results_dict 值。您必须将结果添加到 for 循环范围之外的变量中,或者像下面的@Aiven 回答一样打印每个循环的结果。

标签: python


【解决方案1】:
import speedtest


def test():
    s = speedtest.Speedtest()
    s.get_servers()
    s.get_best_server()
    s.download()
    s.upload()
    res = s.results.dict()
    return res["download"], res["upload"], res["ping"]


def main():
    # write to csv
    with open('file.csv', 'w') as f:
        f.write('download,upload,ping\n')
        for i in range(3):
            print('Making test #{}'.format(i+1))
            d, u, p = test()
            f.write('{},{},{}\n'.format(d, u, p))
    # pretty write to txt file
    with open('file.txt', 'w') as f:
        for i in range(3):
            print('Making test #{}'.format(i+1))
            d, u, p = test()
            f.write('Test #{}\n'.format(i+1))
            f.write('Download: {:.2f} Kb/s\n'.format(d / 1024))
            f.write('Upload: {:.2f} Kb/s\n'.format(u / 1024))
            f.write('Ping: {}\n'.format(p))
    # simply print in needed format if you want to use pipe-style: python script.py > file
    for i in range(3):
        d, u, p = test()
        print('Test #{}\n'.format(i+1))
        print('Download: {:.2f} Kb/s\n'.format(d / 1024))
        print('Upload: {:.2f} Kb/s\n'.format(u / 1024))
        print('Ping: {}\n'.format(p))


if __name__ == '__main__':
    main()

【讨论】:

  • 好的,现在它可以工作了,但它给了我很多额外的信息。我只想要下载、上传和 ping 大声笑。我该如何解决这个问题。
  • 只需从results_dictresults_dict['download'] 中选择需要的信息
  • 天哪,谢谢。你怎么知道要打印什么?而不是所有额外的东西。
  • 我怎样才能把它变成一个 txt/csv 文件,我尝试使用 open() 并写入等,但没有成功
  • holy molly @aiven,非常感谢你,这太棒了。非常感谢您的帮助
【解决方案2】:

我们可以这样使用

import speedtest

def getNetSpeed():
    speedTestHelper = speedtest.Speedtest()
    
    speedTestHelper.get_best_server()

    #Check download speed 
    speedTestHelper.download()

    #Check upload speed
    speedTestHelper.upload()

    #generate shareable image
    speedTestHelper.results.share()

    #fetch result
    return speedTestHelper.results.dict()

for i in range(3):
   print(getNetSpeed())

【讨论】:

    【解决方案3】:

    有一种方法可以更轻松地使用 Pyspeedtest 库

    import pyspeedtest
    st = pyspeedtest.SpeedTest()
    st.ping()
    

    https://pypi.org/project/pyspeedtest/

    【讨论】:

      【解决方案4】:

      哈瑞奎师那?

      试试看,这是获取网速的最佳方式。它适用于 Android 和 Windows。

      import speedtest
      
      st = speedtest.Speedtest() 
       
      while True:  
          download_speed = st.download()
          
          print('Download Speed: {:5.2f} Mb'.format(download_speed/(1024*1024) ))
      

      【讨论】:

      • 请不要添加“谢谢”作为答案。相反,请投票给您认为有帮助的答案。 - From Review
      猜你喜欢
      • 2011-12-04
      • 2019-02-17
      • 2011-08-23
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 2014-05-26
      • 2010-10-20
      • 1970-01-01
      相关资源
      最近更新 更多