Запуск Python в рамках Python и проблема часовых поясов - PullRequest
1 голос
/ 14 января 2011

Мне пришлось создать сценарий запуска для моего приложения 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 ]

2 голосов
/ 14 января 2011

Следуя идее Роберта , вы можете попробовать добавить параметр 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
0 голосов
/ 14 января 2011

Хм. Python уважает переменную среды TZ ... вы не изменяете ее в своем скрипте, поэтому должно быть эквивалентным ее запуску в оболочке.

Я часто устанавливаю часовой пояс явно. В частности, в Django вы можете установить это в файле settings.py (TIME_ZONE). Более общий питон:

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

Я полагаю, если вы установите часовой пояс в файле настроек, проблема исчезнет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...