我遇到了Python 2.7日志记录模块的问题.我的系统是Ubuntu 14.04 64bit,我住在意大利(目前UTC + 1,没有夏令时); 系统正确配置.
我想在当前时区发出记录行,完成正确的时区偏移信息.
请考虑以下代码段:
#!/usr/bin/env python
import sys
print sys.version_info
import commands
print "System time: %s" % commands.getoutput("date --rfc-3339=seconds")
import logging
import datetime
logging.basicConfig(level=logging.DEBUG, stream=sys.stdout,
format="%(asctime)s:" + logging.BASIC_FORMAT,
datefmt="%Y-%m-%dT%H:%M:%S%z")
logger = logging.getLogger()
logger.info("Something happened")
Run Code Online (Sandbox Code Playgroud)
结果如下:
sys.version_info(major=2, minor=7, micro=6, releaselevel='final', serial=0)
System time: 2015-01-09 11:21:44+01:00
2015-01-09T11:21:44+0000:INFO:root:Something happened
Run Code Online (Sandbox Code Playgroud)
因此,系统知道正确的时间和偏移量,而Python似乎错误的时间.
在datetime docs中,据说对于strftime中的%z,结果是"格式为+ HHMM或-HHMM的UTC偏移量(如果对象是天真的,则为空字符串)".
所以,我希望得到以下结果之一:
相反,在这里,我似乎得到了一个不可预测的 - 而且显然是错误的 - 结果.这是怎么回事?是否有可能配置日志模块,做我想做的无覆盖logging.Formatter对象的转换器功能(其中,当然,我可以做任何我喜欢,但是这看起来显然是个错误给我)?
我刚刚在我的项目中检查了一些关于ABC的文档,我需要做一些类型相关的工作.这些是关于ValuesView类型的官方文档,在Python 2和3中:
https://docs.python.org/2/library/collections.html#collections.ValuesView https://docs.python.org/3/library/collections.abc.html
这是源代码(Python 2,但在Python 3中也是如此)
https://hg.python.org/releases/2.7.11/file/9213c70c67d2/Lib/_abcoll.py#l479
我对ValuesView接口感到非常困惑,因为从逻辑角度来看它应该继承自Iterable,恕我直言(它甚至得到了__iter__ Mixin方法); 相反,文档说它只是从MappingView继承而来,它继承自Sized,它不继承自Iterable.
所以我解雇了我的2.7翻译:
>>> from collections import Iterable
>>> d = {1:2, 3:4}
>>> isinstance(d.viewvalues(), Iterable)
True
>>>
Run Code Online (Sandbox Code Playgroud)
毕竟,它看起来是可迭代的,因为Iterable自己的子类钩子.
但是我不明白为什么ValuesView没有明确的Iterable.其他ABC,如Sequence或Set,是明确可迭代的.这背后有一些神秘的原因,或者它只是一个文档+实现的缺点,一个很少使用的功能?
编辑:ValuesView从Python 3.7开始按预期工作.似乎只是疏忽.
我正在尝试测试在受控环境中难以重现的行为.
使用案例:Linux系统; 通常是Redhat EL 5或6(我们刚刚开始使用RHEL 7和systemd,所以它目前已超出范围).
在某些情况下我需要重新启动服务.我们用来停止服务的脚本通常运行得很好; 它将SIGTERM发送到进程,该进程旨在处理它; 如果这个过程没有超时(通常是一两分钟)的脚本发送SIGKILL内处理SIGTERM,然后等待几分钟就能完成.
问题是:在某些(罕见)情况下,进程在SIGKILL之后不会退出; 这通常发生在它严重停留在系统调用上时,可能是因为内核级问题(损坏的文件系统,或者没有工作的NFS文件系统,或者同样糟糕的需要手动干预的东西).
当脚本没有意识到"旧"进程实际上没有退出并且在旧的进程仍在运行时启动了新进程时,出现了一个错误; 我们正在通过一个更强大的锁定系统解决这个问题(所以至少新进程如果旧的运行时不会启动),但我发现很难测试整个系统,因为我还没有找到一种方法来模拟困难的过程.
所以,问题是:
即使作为特权用户,如何手动模拟在向其发送SIGKILL时不会退出的进程?
python ×2
abc ×1
collections ×1
datetime ×1
linux ×1
linux-kernel ×1
logging ×1
process ×1
python-2.7 ×1