一、问题描述
使用django写了一个工具平台的web,平台通过提交一个python指令,执行工具的功能。
有一个脚本会获取本地时间,在使用过程中发现获取的本地时间总是与实际的本地时间差8个小时。
将指令单独拿出来的后台执行,是ok的,就是通过web提交指令的执行的时候有问题。
二、问题原因
(1)django设置的时区为UTC
(2)指令是通过Popen执行的
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’,重启工具平台。
方法二:
将系统环境变量传给popen
env=os.environ.copy()
p = Popen(runCmd.encode(scriptCode),shell=True,stdout=PIPE,stderr=PIPE,env=env)