天天看点

Django下提交执行python指令,时区问题

一、问题描述

使用django写了一个工具平台的web,平台通过提交一个python指令,执行工具的功能。

有一个脚本会获取本地时间,在使用过程中发现获取的本地时间总是与实际的本地时间差8个小时。

将指令单独拿出来的后台执行,是ok的,就是通过web提交指令的执行的时候有问题。

二、问题原因

(1)django设置的时区为UTC

(2)指令是通过Popen执行的

Django下提交执行python指令,时区问题

django的时区,影响了其提交指令的执行时区,django时区设置的是UTC,其获取的本地时间与北京时间差8个小时。

popen执行的时候,设置的env为None,继承了父进程(django的环境变量,时区为UTC),所以指令执行是获取的本地时间与本地北京时间差8个小时。

参考资料:

https://www.jianshu.com/p/c1dee7d3cbb9

https://www.runoob.com/w3cnote/python3-subprocess.html

三、解决办法

方法一:

修改django的时区:TIME_ZONE = ‘Asia/Shanghai’,重启工具平台。

Django下提交执行python指令,时区问题

方法二:

将系统环境变量传给popen

env=os.environ.copy()

p = Popen(runCmd.encode(scriptCode),shell=True,stdout=PIPE,stderr=PIPE,env=env)