在Python中启动Python及时区问题

1 投票
2 回答
1092 浏览
提问于 2025-04-16 09:58

我需要为我的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 个回答

3

接着 Robert的想法,你可以试着在调用 Popen 时添加 env 参数。比如:

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

嗯,Python会尊重TZ这个环境变量……你在脚本里没有改变它,所以它应该和在命令行运行是一样的。

我通常会明确设置时区。在Django这个框架里,你可以在settings.py文件里设置(TIME_ZONE)。更一般的Python设置是:

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

我想如果你在设置文件里设置了时区,这个问题就会解决了。

撰写回答