一、問題描述
使用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)