脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 详解Python脚本如何设置试用期

详解Python脚本如何设置试用期

2022-07-19 12:54somenzz Python

程序员可能会私下给别人开发一些工具,但是通常要给别人试用一下,但是万一别人试用后,把你拉黑,那就白忙活了。今天就分享如何在 Python 里设置有效期

程序员可能会私下给别人开发一些工具,但是通常要给别人试用一下,但是万一别人试用后,把你拉黑,那就白忙活了。今天就分享如何在 Python 里设置有效期。

为了设置有效期,首先要获取当前时间,如果获取本地时间,那么别人可以通过修改操作系统的时间来一直保持有效。最好的办法就是获取网络时间。你说他断网怎么办?

如果断网,有两种方法,要么不给用,要么再取本地时间。

1、获取网络时间

如何获取网络时间呢,可以从 HTTP 返回的 Header 里获取时间,由于这个时间是 GMT 格式的 UTC 时间,我们还需要转为本地时间,下面的脚本都考虑到了,均采用标准库。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from datetime import datetime
from urllib.request import urlopen
import time
import ssl
import sys
 
ssl._create_default_https_context = ssl._create_unverified_context
 
 
def get_network_time():
    url = "https://www.baidu.com"
    try:
        with urlopen(url) as res:
            utctime = gmtstr_to_localtime(res.getheader("Date"))
            return datetime_from_utc_to_local(utctime)
    except Exception as e:
        print("请检查网络设置")
        sys.exit()
 
 
def gmtstr_to_localtime(gmtstr) -> datetime:
    return datetime.strptime(gmtstr, "%a, %d %b %Y %H:%M:%S GMT")
 
 
def datetime_from_utc_to_local(utc_datetime):
    now_timestamp = time.time()
    offset = datetime.fromtimestamp(now_timestamp) - datetime.utcfromtimestamp(
        now_timestamp
    )
    return utc_datetime + offset
 
 
if __name__ == "__main__":
    print(get_network_time())
    # Output:
    # 2022-07-19 06:39:12

2、上锁

这一步很简单,一个日期判断就搞定了:

?
1
2
3
4
5
6
def lock():
    now = get_network_time()
    end_date = datetime(2022826)
    if now > end_date:
        print("试用已到期")
        sys.exit()

然后把上面获取网络时间的代码及 lock 函数均放在 lock.py 文件里,在我们的核心模块 core_work.py 中导入:

?
1
2
3
4
5
from lock import lock
 
def somefunc():
    lock()
    # do your work

在需要 lock() 的地方调用下 lock 函数就可以了。

你可能还需要一个 startup.py 脚本来启动整个程序:

?
1
2
from core_work import main
main()

3、编译 pyd

不编译的话,或者编译为 pyc 的话,上面的工作等于没做,pyc 可以直接反编译成 py 文件,连命名符号都不变。

编译的话,只需要需要把获取网络时间的代码,lock 函数的定义及调用 lock 的代码都编译成 pyd,本例子中就是 lock.py 和 core_work.py 编译成 lock.pyd 和 core_work.pyd,然后把源代码 lock.py 和 core_work.py 删除,其实就可以发布了,想破解只能反编译 pyd 文件,得到的是汇编代码,这个门槛已经拒绝了大多数的人。

pyd 的编译流程是 .py -> .c -> pyd,也就是说 pyd 是从 c 语言编译的,除了隐藏源代码之外,速度也会变快一些。

如果不放心的话,那就 pyinstall -k key startup.py 再加密打包一下,key 就是加密的密码,如果在 pyd 文件 import 了第三方库,那么要在 spec 文件中填写 hiddenimports。

如何编译 pyd 呢?代码如下:

?
1
2
3
4
5
6
7
8
9
from distutils.core import setup
from Cython.Build import cythonize
files = ["lock.py""core_work.py"]
 
setup(
    name="yourapp",
    ext_modules=cythonize(files),
    script_args=["build_ext""-b""./build""-t""./build/temp"],
)

运行之前你要 pip install cython。

然后在 build 文件夹就可以看到编译好的 pyd 文件,然后把他们移动到源代码的位置,重命名为 xxx.pyd 就可以了。

到此这篇关于详解Python脚本如何设置试用期的文章就介绍到这了,更多相关Python脚本试用期内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://mp.weixin.qq.com/s/-TBM2PUFwsZJFC0egS17IQ

延伸 · 阅读

精彩推荐
  • PythonPython实现的视频播放器功能完整示例

    Python实现的视频播放器功能完整示例

    这篇文章主要介绍了Python实现的视频播放器功能,结合完整实例形式分析了Python基于pyglet库实现视频播放功能的相关操作技巧,需要的朋友可以参考下...

    jacklulu201011812021-01-11
  • PythonPython自动化爬取天眼查数据的实现

    Python自动化爬取天眼查数据的实现

    本文将结合实例代码,介绍Python自动化爬取天眼查数据的实现,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学...

    end for time11392021-11-30
  • PythonPython实现栈的方法

    Python实现栈的方法

    这篇文章主要介绍了Python实现栈的方法,实例分析了Python实现栈的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下 ...

    buaa_shang5312020-07-07
  • Pythonmatplotlib绘图实例演示标记路径

    matplotlib绘图实例演示标记路径

    这篇文章主要介绍了matplotlib绘图实例演示标记路径,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下...

    mengwei8292021-01-08
  • Pythonpython读取raw binary图片并提取统计信息的实例

    python读取raw binary图片并提取统计信息的实例

    今天小编就为大家分享一篇python读取raw binary图片并提取统计信息的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    oldveteran7962020-04-30
  • PythonPython中的XML库4Suite Server的介绍

    Python中的XML库4Suite Server的介绍

    这篇文章主要介绍了Python中的XML库4Suite Server,来自于IBM官方网站,需要的朋友可以参考下 ...

    脚本之家3082020-06-06
  • PythonPython实现"验证回文串"的几种方法

    Python实现"验证回文串"的几种方法

    这篇文章主要介绍了Python实现"验证回文串"的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    求兵11012021-09-29
  • Pythonpython numpy中mat和matrix的区别

    python numpy中mat和matrix的区别

    这篇文章主要介绍了python numpy中mat和matrix的区别,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Crystal_Coding7982021-09-19