Python脚本,每次运行时都会在序列中输入下一个数字。

时间:2017-04-21 15:25:29

标签: python python-3.x

我正在尝试编写一个脚本,该脚本将具有一个启动001的计数,并且每次运行该脚本时都会增加一个。

我只是帮助一些帮助开始这个,我该怎么做才能让它知道每次从哪里开始?有没有办法可以将它构建到脚本中来执行此操作?

到目前为止,关于如何做到这一点的坏主意:   - 将数字(001)导出到文本文件,并让脚本在每个脚本(001 +1)的末尾更改该编号。

  • 此数字也会出现在电子表格中,因此请将脚本从电子表格中读取为值,然后将该值添加到该值。

我觉得必须有一种更简单的方法,我更喜欢在脚本中自包含的方式。有人可以帮助我指出正确的方向吗?

感谢您的投入。

3 个答案:

答案 0 :(得分:3)

如果你想要某种状态持久性,那么你的选择是有限的:

  1. 将状态保存到您在问题中建议的文件中(文本文件或电子表格,但电子表格更难)
  2. 改变你的概念,这样代替“多次运行脚本”,脚本总是运行,但你给它一些信号(键盘输入,带按钮的GUI等),让它知道增加计数器
  3. 将您的脚本分成两半,一个服务器脚本和一个客户端。服务器将侦听来自客户端的连接,并跟踪当前计数,然后客户端将连接并告诉服务器增加计数,如果需要,它还可以将先前或新计数发送回客户端以用于某种类型输出这样可以防止对磁盘进行多次写入,但如果服务器进程关闭,则计数将丢失。

答案 1 :(得分:2)

以下是使用INI文件和JSON文件保存状态的快速示例。两者都试图读取配置文件,更新或初始化计数器,将新计数器保存回配置,然后返回计数器。

#!/usr/bin/env python3

import configparser
import json
from contextlib import suppress


def get_updated_ini_counter():
    filename = 'config.ini'
    section = 'general'
    option = 'counter'
    starting_count = 100

    config = configparser.ConfigParser()
    config.read(filename)
    counter = 1 + int(config.get(section, option, fallback=starting_count - 1))
    if section not in config:
        config.add_section(section)
    config.set(section, option, str(counter))
    with open('config.ini', 'w') as f:
        config.write(f)
    return counter


def get_updated_json_counter():
    filename = 'config.json'
    option = 'counter'
    starting_count = 100
    config = {}

    with suppress(FileNotFoundError):
        with open(filename) as f:
            config = json.load(f)
    config[option] = 1 + config.get(option, starting_count - 1)
    with open(filename, 'w') as f:
        json.dump(config, f, indent=4)
    return config[option]


if __name__ == '__main__':
    print('ini counter  = {}'.format(get_updated_ini_counter()))
    print('json counter = {}'.format(get_updated_json_counter()))

答案 2 :(得分:1)

这似乎是一个广泛的问题。但是说你的脚本是water.H2O.waitForCloudSize(3, 50 * 1000/*ms*/);并且它只是打印hello.py,那么对于一个简单的情况,你在自己的台式机/笔记本电脑上运行这个脚本只需要包含几行来跟踪你的持续时间跑了剧本。

"hello world"

输出:

import datetime

def hello():
    print "hello, world"

if __name__ == "__main__":

    now = datetime.datetime.now()
    ## create log
    with open("logs.txt", "a") as log:
        log.write(str(now) + "\n") ## write out to log 

    ## run hello
    hello()

如果您需要知道某天/小时运行脚本的次数,您可以将其导出到Excel或其他内容,以显示一段时间内的使用情况。

使用atexit更新:

以上是使用atexit

的上述示例
  

atexit模块定义了一个用于注册清理功能的函数。这样注册的函数在正常的解释器终止时自动执行。

>python hello.py
hello, world
>python hello.py
hello, world
>python hello.py
hello, world
>python hello.py
hello, world
>python hello.py
hello, world
>cat logs.txt
2017-04-21 10:38:46.629779
2017-04-21 10:38:47.229658
2017-04-21 10:38:47.664318
2017-04-21 10:38:47.957451
2017-04-21 10:38:48.279116