python之给项目增加打开次数的限制

一、根据txt文件进行限制

读取并检查打开次数是否超过最大值。如果超过,则程序终止并给出提示;否则增加打开次数并保存到文件。

缺点就是如果用户删除了txt文件或者更改会导致限制出错。

import os

# 设置最大允许打开次数
MAX_OPEN_COUNT = 5
# 计数文件的路径
COUNTER_FILE_PATH = 'open_counter.txt'

def read_open_count():
    # 如果计数文件存在,则读取打开次数;否则返回0
    if os.path.exists(COUNTER_FILE_PATH):
        with open(COUNTER_FILE_PATH, 'r') as file:
            count = file.read()
            return int(count) if count.isdigit() else 0
    return 0

def write_open_count(count):
    # 写入新的打开次数到计数文件
    with open(COUNTER_FILE_PATH, 'w') as file:
        file.write(str(count))

def main():
    # 读取当前的打开次数
    open_count = read_open_count()
    
    if open_count >= MAX_OPEN_COUNT:
        print("程序已达到最大打开次数,无法再打开。")
        return
    
    # 增加打开次数并保存
    open_count += 1
    write_open_count(open_count)
    
    # 继续执行程序的其他逻辑
    print(f"这是第 {open_count} 次打开程序。")

if __name__ == '__main__':
    main()

二、根据环境变量

在一些简单的应用程序中,可以使用环境变量来记录打开次数。不过,这种方法不太持久,重启系统后会丢失。

import os

# 设置最大允许打开次数
MAX_OPEN_COUNT = 5
ENV_VARIABLE = 'APP_OPEN_COUNT'

def get_open_count():
    return int(os.getenv(ENV_VARIABLE, 0))

def set_open_count(count):
    os.environ[ENV_VARIABLE] = str(count)

def main():
    open_count = get_open_count()
    
    if open_count >= MAX_OPEN_COUNT:
        print("程序已达到最大打开次数,无法再打开。")
        return
    
    open_count += 1
    set_open_count(open_count)
    
    print(f"这是第 {open_count} 次打开程序。")

if __name__ == '__main__':
    main()

三、使用系统注册表(Windows)

只在Windows上运行,可以使用Windows注册表来保存打开次数。

import winreg as reg

# 设置最大允许打开次数
MAX_OPEN_COUNT = 5
REGISTRY_KEY = r'SOFTWARE\MyApp'
VALUE_NAME = 'OpenCount'

def get_open_count():
    try:
        key = reg.OpenKey(reg.HKEY_CURRENT_USER, REGISTRY_KEY)
        count, _ = reg.QueryValueEx(key, VALUE_NAME)
        reg.CloseKey(key)
        return count
    except FileNotFoundError:
        return 0

def set_open_count(count):
    key = reg.CreateKey(reg.HKEY_CURRENT_USER, REGISTRY_KEY)
    reg.SetValueEx(key, VALUE_NAME, 0, reg.REG_DWORD, count)
    reg.CloseKey(key)

def main():
    open_count = get_open_count()
    
    if open_count >= MAX_OPEN_COUNT:
        print("程序已达到最大打开次数,无法再打开。")
        return
    
    open_count += 1
    set_open_count(open_count)
    
    print(f"这是第 {open_count} 次打开程序。")

if __name__ == '__main__':
    main()

四、使用数据库

可以使用SQLite或其他数据库来记录打开次数。这种方法适合需要存储更多信息或管理多个用户的情况。

import sqlite3

# 设置最大允许打开次数
MAX_OPEN_COUNT = 5
DATABASE_PATH = 'app_usage.db'

def create_database():
    conn = sqlite3.connect(DATABASE_PATH)
    cursor = conn.cursor()
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS usage (
            id INTEGER PRIMARY KEY,
            count INTEGER DEFAULT 0
        )
    ''')
    conn.commit()
    conn.close()

def get_open_count():
    conn = sqlite3.connect(DATABASE_PATH)
    cursor = conn.cursor()
    cursor.execute('SELECT count FROM usage WHERE id = 1')
    row = cursor.fetchone()
    count = row[0] if row else 0
    conn.close()
    return count

def update_open_count(count):
    conn = sqlite3.connect(DATABASE_PATH)
    cursor = conn.cursor()
    cursor.execute('INSERT OR REPLACE INTO usage (id, count) VALUES (1, ?)', (count,))
    conn.commit()
    conn.close()

def main():
    create_database()
    open_count = get_open_count()
    
    if open_count >= MAX_OPEN_COUNT:
        print("程序已达到最大打开次数,无法再打开。")
        return
    
    open_count += 1
    update_open_count(open_count)
    
    print(f"这是第 {open_count} 次打开程序。")

if __name__ == '__main__':
    main()

五、通过验证互联网上的文件

(如 https://你的网址/lic.txt)来控制程序的访问

import requests

# 设置许可证文件的URL
LICENSE_URL = 'https://你的网址/lic.txt'

def check_license():
    try:
        response = requests.get(LICENSE_URL, timeout=5)  # 设置超时时间为5秒
        if response.status_code == 200:
            return True  # 文件可访问
        else:
            return False  # 文件不可访问
    except requests.RequestException:
        return False  # 网络请求异常

def main():
    if check_license():
        print("许可证有效,可以使用程序。")
        # 在这里添加程序的主逻辑
    else:
        print("无法访问许可证文件,程序无法使用。")

if __name__ == '__main__':
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值