天天看點

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)