我有一个python应用程序,需要每隔三个月绘制几年的日期.重要的是,日期每年恰好发生4次,并且日期尽可能在每年的同一天发生,并且日期尽可能在每月的同一天发生,并且日期为尽可能接近"3个月"(这是一个移动的目标,特别是在闰年).不幸的是,datetime.timedelta不支持几个月!
在python中有没有"标准"的方法来进行这个计算?
如果最糟糕的情况发生,我会试着让我的应用程序询问PostgreSQL,它确实有很好的内置支持日期计算,答案如下:
# select ('2010-11-29'::date + interval '3 months')::date;
date
------------
2011-02-28
(1 row)
Run Code Online (Sandbox Code Playgroud) 好了,所以不是严格意义上的编程问题,但问题是我想我的新建筑的业务接入/报警系统在我的业务整合到我的*NIX设置的其余部分.我不想使用为Windows XP SP1编写的一些cruddy windows GUI程序,它通过串行连接管理裸电路板,并提供绝对零API.那里必须有一些体面的东西!
那里有哪些体面的访问/报警硬件供应商?我喜欢通过python,perl,ruby等界面连接到一个带有集成NIC的漂亮控制面板.哎呀,我甚至会选择一些我至少可以执行和解析的CLI工具.
我们有门/电梯,磁力锁,雷克斯,指纹识别器等磁卡读卡器供我们使用.
我们有警报的标准门/窗,动作等.
硬件厂商的建议?
我需要验证证书是否由我的自定义CA签名.使用OpenSSL命令行实用程序很容易做到:
# Custom CA file: ca-cert.pem
# Cert signed by above CA: bob.cert
$ openssl verify -CAfile test-ca-cert.pem bob.cert
bob.cert: OK
Run Code Online (Sandbox Code Playgroud)
但是我需要在Python中做同样的事情,我真的不想呼叫命令行实用程序.据我所知,M2Crypto是OpenSSL的"最完整"的python包装器,但我无法弄清楚如何完成命令行实用程序的功能!
引用这个问题来了解如何在C代码中完成同样的任务,我已经能够完成一半的工作. 我选择的变量名与openssl verify命令行实用程序的源代码中使用的变量名相同,请参阅openssl-xxx/apps/verify.c.
import M2Crypto as m2
# Load the certificates
cacert = m2.X509.load_cert('test-ca-cert.pem') # Create cert object from CA cert file
bobcert = m2.X509.load_cert('bob.cert') # Create cert object from Bob's cert file
cert_ctx = m2.X509.X509_Store() # Step 1 from referenced C code steps
csc = m2.X509.X509_Store_Context(cert_ctx) # Step 2 & 5
cert_ctx.add_cert(cacert) # …Run Code Online (Sandbox Code Playgroud)