Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python日志模块在cygwin下报告不正确的时区_Python_Logging_Timezone - Fatal编程技术网

python日志模块在cygwin下报告不正确的时区

python日志模块在cygwin下报告不正确的时区,python,logging,timezone,Python,Logging,Timezone,我正在运行python脚本,该脚本使用Windows7上cygwin下的日志模块。date命令报告正确的时间: $ date Tue, Aug 14, 2012 2:47:49 PM 但是,python脚本需要五个小时: 2012-08-14 19:39:06,438: Done! 在为脚本配置日志记录时,我不会做任何花哨的事情: logging.basicConfig(format='%(asctime)-15s: %(message)s', level=logging.DEBUG)

我正在运行python脚本,该脚本使用Windows7上cygwin下的日志模块。
date
命令报告正确的时间:

$ date
Tue, Aug 14, 2012  2:47:49 PM
但是,python脚本需要五个小时:

2012-08-14 19:39:06,438: Done!
在为脚本配置日志记录时,我不会做任何花哨的事情:

logging.basicConfig(format='%(asctime)-15s: %(message)s', level=logging.DEBUG)

有人能告诉我发生了什么以及我如何修复它吗?

在导入日期/时间模块之前,您需要在python脚本中取消设置环境“TZ”。它由cygwin设置,但Windows无法理解:

if os.getenv("TZ"):
    os.unsetenv("TZ")

似乎如果设置了
TZ
环境变量,Cygwin中的Python将在GMT(UTC)时区中运行。即使将
TZ
设置为与Windows框相同的时区,也是如此

作为一种解决方法,您可以在调用Python之前在bash shell中调用
unset TZ
,然后Python将使用Windows时区。对我来说,在Python中删除ENV变量不起作用,它需要在启动Python之前发生(即使在导入任何与时间相关的模块之前,在Python过程中尽早删除
os.environ['TZ']
,可能是因为必须导入
os
,这可能会触发Cygwin/Python“bug”时区由此变成UTC?)


可以通过将
unset TZ
添加到.bash_配置文件(在安装Cygwin的位置的子目录中)来自动进行修复。

可以尝试将
datefmt='%Y-%m-%d%H:%m:%s'
添加到
日志记录.basicConfig
调用中吗?我正在使用Cygwin 1.7.16,它工作正常。日期和日志模块都返回时间戳。看起来它使用的是UTC?也许您需要设置
TZ
环境变量。现在我倾向于使用本机应用程序而不是Cygwin。请看和。谢谢,我将尝试在评论中提出建议,明天再报告@保罗:我更愿意在考虑其他选择之前,先解决cygwin的问题。很有趣,@Yun Chen Sung。当我从脚本中执行时,这不起作用。如果在运行bash之前取消设置并从bash导出TZ,则会显示正确的时间。你知道为什么这个代码在Cygwin中不起作用吗?@Nikita:如果我在导入
time
time之前这样做,那么时区将为我提供windows时区。如果在导入
时间后执行此操作,则会得到错误的时区。我假设导入时
time
检查
$TZ
一次。这个解决方案对我不起作用(从Python内部取消TZ“太晚了”,我得到了错误的GMT行为),但我发现在调用Python之前在bash shell中运行“unset TZ”是有效的。自动修复的一种方法是在.bash_配置文件中粘贴“unset TZ”。我还建议在运行时对datetime.datetime.now()进行dbl检查datetime.datetime.utcnow()以适当的(小时)间隔,因为此行为似乎取决于Cygwin的确切版本。