在python和timezone问题中启动python

时间:2011-01-14 19:17:47

标签: python django datetime timezone

我必须为我的django应用程序制作一个启动器脚本,它似乎以某种方式将时区切换为GMT(默认为+2),并且每个日期时间在使用脚本时落后两个小时。可能导致什么?

这是我使用的启动器脚本:

#!/usr/bin/env python

import os
import subprocess
import shlex
import time

cwd = os.getcwd()

p1 = subprocess.Popen(shlex.split("python manage.py runserver"),
        cwd=os.path.join(cwd, "drugsworld"))
p2 = subprocess.Popen(shlex.split("python coffee_auto_compiler.py"),
        cwd=os.path.join(cwd))

try:
    while True:
        time.sleep(2)
except KeyboardInterrupt:
    p1.terminate()
    p2.terminate()

如果我手动运行python manage.py runserver,则时区为+2。但是,如果我使用此脚本,则时区设置为GMT。

2 个答案:

答案 0 :(得分:2)

跟进Robert's idea,您可以尝试将env参数添加到Popen来电。例如:

import subprocess
p = subprocess.Popen(["date"], env={'TZ':'America/New_York'})
p.wait()
# Fri Jan 14 14:45:44 EST 2011

p = subprocess.Popen(["date"], env={'TZ':'Asia/Taipei'})
p.wait()
# Sat Jan 15 03:45:44 CST 2011

答案 1 :(得分:0)

嗯。 Python尊重TZ环境变量......你没有在脚本中更改它,所以应该等同于在shell中运行它。

我经常明确设置时区。特别是在Django中,您可以在settings.py文件(TIME_ZONE)中进行设置。更一般的python是:

os.environ['TZ']="America/New_York"
time.tzset()

我想如果你在设置文件中设置时区,问题就会消失。