首页 \ 问答 \ 在没有预设退出条件的情况下停止无限循环(stopping an infinite loop with no preset exit condition)

在没有预设退出条件的情况下停止无限循环(stopping an infinite loop with no preset exit condition)

好的,所以下面的脚本将在RPI3上运行以监控网络速度。
我需要一种方法来阻止无限循环而不会在每个循环中断进程。

截至目前,脚本不会在程序终止之前退出循环。 这是一个很大的问题,因为我需要使用workbook.close()函数保存它。

另一种解决方法是关闭每个周期的文件,但据我所知,你不能用xlsxwriter编辑xlsx文件。 只写新...

import xlsxwriter
import pyspeedtest
import time

workbook = xlsxwriter.Workbook('data.xlsx')
worksheet = workbook.add_worksheet()
st = pyspeedtest.SpeedTest()


def testspeed():
    ping = st.ping()
    upload = st.upload()
    download = st.download()
    return ping, upload, download


n = 1
while True:
    p, u, d = testspeed()
    worksheet.write(n, 0, p)
    worksheet.write(n, 1, u)
    worksheet.write(n, 2, d)
    n += 1
    time.sleep(3600)
    #Some user input to break the loop
    #but not hinder the process


workbook.close()



ps:如果有人可以将标题编辑为合适的东西,那会让我开心....


Ok, so the script below is going to run on an RPI3 to monitor Network speed.
I need a way to stop infinite loop without interrupting the process every cycle.

As of right now, the script won't exit the loop before the program is terminated. That is a huge problem because I need to save it with the workbook.close() function.

Another way to solve this would be to just close the file for each cycle, but as far as I know, you can't edit a xlsx file with xlsxwriter. Only write new...

import xlsxwriter
import pyspeedtest
import time

workbook = xlsxwriter.Workbook('data.xlsx')
worksheet = workbook.add_worksheet()
st = pyspeedtest.SpeedTest()


def testspeed():
    ping = st.ping()
    upload = st.upload()
    download = st.download()
    return ping, upload, download


n = 1
while True:
    p, u, d = testspeed()
    worksheet.write(n, 0, p)
    worksheet.write(n, 1, u)
    worksheet.write(n, 2, d)
    n += 1
    time.sleep(3600)
    #Some user input to break the loop
    #but not hinder the process


workbook.close()



ps : it would make me very happy if someone could edit the title to something fitting....


原文:https://stackoverflow.com/questions/49482313
更新时间:2019-12-13 07:39

最满意答案

如果程序在控制台的前台运行,则可以使用Control - C中断该过程。 在这种情况下, contextlib.closing提供了一种方便的清理方法:

with contextlib.closing(xlsxwriter.Workbook('data.xlsx')) as workbook:
    worksheet = workbook.add_worksheet()
    st = pyspeedtest.SpeedTest()

    n = 1
    while True:
        p, u, d = testspeed()
        worksheet.write(n, 0, p)
        worksheet.write(n, 1, u)
        worksheet.write(n, 2, d)
        n += 1
        time.sleep(3600)
        # Just press Control-C when you get tired of waiting,
        # workbook.close() will be called automatically

If your program is running in the foreground in a console, you can interrupt the process with Control-C. contextlib.closing provides a convenient way to clean up in that case:

with contextlib.closing(xlsxwriter.Workbook('data.xlsx')) as workbook:
    worksheet = workbook.add_worksheet()
    st = pyspeedtest.SpeedTest()

    n = 1
    while True:
        p, u, d = testspeed()
        worksheet.write(n, 0, p)
        worksheet.write(n, 1, u)
        worksheet.write(n, 2, d)
        n += 1
        time.sleep(3600)
        # Just press Control-C when you get tired of waiting,
        # workbook.close() will be called automatically
2018-03-26

相关问答

更多

jsPlumb draggable element javascript函数(jsPlumb draggable element javascript function)

你错过了jsPlumb.setContainer($("body")); https://jsfiddle.net/mkaran/mLthybzo/ https://jsplumbtoolkit.com/community/doc/home 编辑:你的例子的小提琴https://jsfiddle.net/mkaran/aof6mq34/ You are missing the jsPlumb.setContainer($("body")); https://jsfiddle.net/mkaran

MVC4:ViewModel(带有radiobuttonlist)在HttpPost之后为空(MVC4: ViewModel (with radiobuttonlist) is empty after HttpPost)

我没有看到表单有如下ID的映射: @Html.HiddenFor(model => model.Id) 每个内部问题集合也应该具有Id,以便与表单一起发布。 因此,对于您可以拥有的每个问题,在表单的foreach循环中: @Html.HiddenFor(model => item.Question.Id) 该模型还具有MultipleChoiceQuestion类型的集合。 对于模型绑定到集合,集合元素的名称应具有带有序数字的name属性,如本文http://haacked.com/arch

如何在同一帐户上设置“Dev repo”(在prod和团队之间)(How to set up a “Dev repo” (between the prod and the team) on the same account)

在git中似乎存在一个基本的误解。 您有一个通过设置组织正确找到的回购。 那很棒。 你和你的开发人员在他们的回购中单独分工。 那也没关系。 现在,如果您是首席开发人员,并且想要了解人们的工作方式,那么您可以在GitHub上的中央组织中组织所有这些。 即开发者发送拉动请求并将它们拉入开发分支,您不必将它们拉入主控。 在您的开发分支中,您可以测试合并的代码,看它是否符合您的需求。 如果您不喜欢它,则不必将其与生产和/或主分支合并。 在git中,你使用分支机构来理清好事和坏事。 你批准的所有东西都合并

xml序列化程序导致光子rpc命令中的空引用(xml serializer causes nullreference in photon rpc comand)

你的问题是o1没有做任何事情。 updateinfo正在设置值,但是从updateinfo返回后o1正在丢失。 请参阅下面的代码进行更正 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Xml; using System.Xml.Serialization; namespace ConsoleApplicatio

在列表中找到re.compile匹配的最快方法(Fastest way to find a re.compile match in list)

我制作了一个测试文件并测试了一些变化。 通过遍历文件来搜索静态字符串(如您所做的那样)的最快方法是使用string in line 。 但是,如果您将使用加载的数据进行多次搜索(实际上根据下面的测试数据超过30次),那么以(计算)时间以dicts的形式为PLU和EAN生成查找表是值得的并将其用于将来的搜索。 loaded 120000 lines question regex 0.114868402481 simpler regex 0.417045307159 other reg

CakePHP和GoogleMapsHelper:如何从我的数据库中加载标记?(CakePHP and GoogleMapsHelper: How do I load markers from my DB?)

你只是忘记回应标记。 请注意示例中的短标记<?= 。 这是做<?php echo的简短(有点难看)的方式。 此外,没有必要像你一样打开/关闭PHP标签。 它可以全部放在一个区块内。 最后,您在选项数组中声明了一个重复的键longitude ,您可能通过Post模型的字段名称来表示longitude 。 所有这些都放在一起,这应该可以解决问题: <?php foreach ($posts as $post): echo $this->GoogleMap->addMarker(

从同一网站/路径提供内容和webdav(Serving content and webdav from the same website/path)

我最终使用了一个Apache实例并在前面建立了一个反向代理。 I ended up using an Apache instance at my disposal and establishing a reverse proxy in front.

在Sql Server Analysis Services中计算MODE(一组中最常见的数字)(Calculating MODE (most common number in a set) in Sql Server Analysis Services)

我可以看到两种可能的选择。 创建.Net存储过程是一个,但调用它们有一些开销,所以你不希望在太多单元格上运行模式功能。 另一个选项是,如果没有太多需要操作的不同值,则创建一个具有基于该数字的属性的维度。 然后,您可以创建行计数度量并通过使用数值对维度执行TOPCOUNT(...,1)来获取模式。 I can see two possible alternatives. Creating a .Net stored proc is one, but there is a bit of overhe

相关文章

更多

最新问答

更多
  • NumPy标量,广播和__iadd__方法(NumPy scalars, broadcasting and the __iadd__ method)
  • 快速排序算法输出错误(Getting wrong output for quicksort algorithm)
  • Rails管理员:没有Rails 4应用程序的编辑,显示或删除按钮(Rails Admin: No edit, show, or delete buttons for Rails 4 app)
  • 部分刷新问题触发两次(Issue with partial refresh triggered twice)
  • jsPlumb draggable element javascript函数(jsPlumb draggable element javascript function)
  • MVC4:ViewModel(带有radiobuttonlist)在HttpPost之后为空(MVC4: ViewModel (with radiobuttonlist) is empty after HttpPost)
  • 如何在同一帐户上设置“Dev repo”(在prod和团队之间)(How to set up a “Dev repo” (between the prod and the team) on the same account)
  • 如何在tcl中将eth0配置为发送方udp端口(how to configure eth0 as a sender udp port in tcl)
  • EF6.1 beta 1如何获得Tooling Consolidation功能?(EF6.1 beta 1 how to get the Tooling Consolidation feature?)
  • 适用于Windows和PHP 5.5的Phalcon(Phalcon for Windows and PHP 5.5)
  • 有没有办法忽略hg责任中的提交?(Is there a way to ignore a commit in hg blame?)
  • Desire2通过API学习访问学期的权限(Desire2Learn Permissions to Access Semesters Via API)
  • 从aspx将服务器的文件复制到另一台服务器(Copy a file of a server to another server from aspx)
  • 使用YSlow / Web Developer扩展程序确定页面大小(Figuring out page size with YSlow / Web Developer extension)
  • Select语句将字符串中的前7个字符与其他表中的其他7个字符进行比较(Select statement which compares first 7 chars in a string with other 7 chars in other table)
  • 检测对注册表的更改,防止更改等(Detect changes to registry, prevent changes, etc)
  • 用户的鼠标/键盘运动分析是否有特殊名称?(Does the analysis of mouse/keyboard motions of a user have a special name?)
  • 获取Rails中资源的路由列表(Get list of routes for a resource in Rails)
  • 用函数值除以数字(Divide a function value by a number)
  • 熊猫Python:如何从今天开始创建失效列?(Pandas Python: How to create lapse since today column?)
  • GDK Bug报告(GDK Bug Reports)
  • 困惑于在python中循环遍历列表(confused about looping through lists in python)
  • 'less'由'which'输出指定的文件('less' the file specified by the output of 'which')
  • 如何在ASP.NET中优化AJAX(How to optimize AJAX in ASP.NET)
  • 在文本文件中转换纪元时间(Convert epoch times in text file)
  • 表细胞伸展(Table cell stretching)
  • GridView控件(GridView Control)
  • 从构建定义文件控制pdb文件输出(Control pdb file output from build defintion file)
  • *将方法传递给类(*Passing a Method into a Class)
  • 如何在HttpReceiveHttpRequest()中使用HTTPS?(How to use HTTPS with HttpReceiveHttpRequest()?)