【问题标题】:A Python infinite loop with arguments that can be manually changed as the script runs带有参数的 Python 无限循环,可以在脚本运行时手动更改
【发布时间】:2020-06-24 23:27:18
【问题描述】:

这是我尝试开始创建一个“实时”运行的脚本,其参数可以在脚本运行时更改。

我的想法是会有一个 Python 脚本作为无限循环运行:

output.py

while True:
    print(0)

它总是输出0。会有一个文件,现在我猜是 config.ini 文件(或类似的文件),我可以在其中设置输出为1 的时间。比如:

config.ini

[INPUT]
times = [[4000, 6000], [25000, 55000]]

注意:我将其想象为以秒为单位的 24 小时刻度(86400 秒),间隔以秒为单位。

它是如何工作的:

  1. 我启动 output.py,它会在几秒钟内从当前 GMT 开始运行
  2. 我将我的时间间隔(即[[4000, 6000], [25000, 55000]])输入到config.ini,其中输出为1
  3. output.py 一直在“检查”config.ini 并导入新输入的时间间隔,0 将更改为1,以及检查是否删除了预定的时间间隔
  4. 当输入到 config.ini 的时间发生时(即[4000, 6000]),在间隔期间输出设置为1输入。一旦结束,输出将返回到0,并且不会再次变为1,直到达到另一个预定间隔(即[25000, 55000])。

补充要点:

  • config.ini 文件始终由 output.py 来“检查”新的时间间隔,其中输出将是 1 而不是 0。 “检查”将在几分钟甚至几秒钟的范围内。
  • output.py 每次 GMT 到达午夜时都会“重置”
  • output.py 是在真实的时间尺度上工作的,所以输出实际上是每秒输出一次
  • config.ini 中可以输入任意数量的时间间隔,或者根本没有
  • config.ini 可以在 output.py 运行时随时更改
  • 01 可以认为是在 y 轴上,时间间隔在 x 轴上
  • output.py 在格林威治标准时间午夜重置时,如果时间间隔仍在 config.ini (即[[4000, 6000], [25000, 55000]]),它们只会在指定的时间再次应用。

正如我之前提到的,它不需要是 config.ini 文件,它可以是 .txt 或其他类型的文件,甚至可能是数据库。我理想情况下想要使用的是可以修改的东西,其中条目和删除可以手动完成(我输入和删除时间间隔),或者自动(一个单独的 Python 脚本可以在 config.ini 文件中输入和删除间隔)。

如果需要澄清,请告诉我。这是我一段时间以来一直试图解决的问题,我希望有一个可行的示例来构建。

【问题讨论】:

  • 堆栈溢出更适用于您编写了一些代码但无法使其以您想要的方式工作的情况。您实际上是在要求其他人为您编写整个程序。这不是 Stack Overflow 的工作方式。
  • @kindall 感谢您让我知道 Stack Overflow 的工作原理。这不是我见过做的问题,我个人也不知道去谷歌什么的,或者在SO上搜索找到类似的问题。如果您对与我可以研究的问题相关的主题有任何建议,请告诉我。

标签: python config infinite-loop


【解决方案1】:

要读取 INI 文件,您可以使用 configparser 模块。或者 Py2 中的 ConfigParser。

要获取新参数,您需要设置一个间隔,比如 1 秒或更多,然后使用:

os.path.getmtime("your_file.txt")

如果修改时间与上次相比发生了变化,则重新加载参数。 您可以使用线程模块中的 Timer() 来激活不同的操作和一个根据新参数操作计时器的循环。 或者你可以像这样循环检查不同的时间间隔:

from time import time, sleep

act_time = time()
check_args = 1.0
while 1:
    current_time = time()
    if current_time-act_time>=check_args:
        reload_args()
        act_time = current_time
        continue
    # And other similar checks according to other vars updated by reload_args() function
    sleep(0.001) # Prevent a busy loop

当然,而不是使用 time() 和重置 act_time,您可以设置自己的时间保持变量,并在 sleep() 之后添加 0.001。但是您仍然需要一种可靠的方法来检查您检查的每个间隔经过了多少时间并添加到它们中,因此您必须处理这些事情。没有人会在这里为您编写比这更多的代码。祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2016-01-05
    • 1970-01-01
    相关资源
    最近更新 更多