如何让libfaketime在Django服务器内部工作?

2024-09-30 00:35:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用libfaketime来阻止程序(tbl2asn)过期。此程序在Django视图中调用。Django服务器位于docker容器中,通过docker compose设置以下环境变量:

environment:
  LD_PRELOAD: "/path/to/libfaketime.so.1"
  DONT_FAKE_MONOTONIC: 1
  FAKETIME_DID_REEXEC: "true"

当我使用docker exec进入容器并从命令行运行python时,libfaketime工作得非常好。但是,当从Django视图调用它时,它不会更改日期,并且程序无法执行

从视图中调用的代码:

import os
from libfaketime import fake_time
import subprocess

with fake_time('2018-01-01 00:00:01'):
   print(datetime.datetime.now())
   print(os.environ)
   subprocess.run([command])

这将产生以下输出:

2020-12-01 14:00:18.037169

environ({'PATH': ..., 'HOSTNAME': ..., 'LD_PRELOAD': '/path/to/libfaketime.so.1', 'DONT_FAKE_MONOTONIC': 1, 'FAKETIME_DID_REEXEC': 'true', 'HTTPD_PREFIX': '/usr/local/apache2', 'HTTPD_VERSION': '2.4.46', 'HTTPD_SHA256': ..., 'HTTPD_PATCHES': '', 'HOME': '/root', 'LC_CTYPE': 'C.UTF-8', 'TZ': 'America/New_York', , 'RUN_MAIN': 'true'})

并且在运行子流程命令时也会产生错误([tbl2asn]此tbl2asn副本已存在一年多。请下载当前版本。)


Tags: topathdjangodockerimport程序视图true

热门问题