【问题标题】:Setting the Time and Date via Python/Linux通过 Python/Linux 设置时间和日期
【发布时间】:2014-12-08 17:28:33
【问题描述】:

我正在开发一个库存控制系统,有望在我们的几家工厂中部署。我将使用 Linux SBC(Pi、Beaglebone ......等)平台。我希望我的用户界面是非 Linux 的,这样最终用户就不需要知道 Linux 操作系统或如何使用命令行进行导航。我的应用程序将在启动时自动启动,并通过 Python/Tkinter HMI 为最终用户提供所有必要的前端。我的原型基于 Raspberry Pi B。因为许多安装可能没有可用的网络,我需要一种通过 python 通过用户界面设置系统时间的方法。我在带有 i2C 接口的 GPIO 引脚上使用 Dallas 3231 RTC I2C 芯片。一切都已解决,除了 Python 似乎没有一种简单的方法来设置系统时间、将其写入 RTC 并在网络可用时忽略 NPT 同步。这可能非常简单,但我很难过。

【问题讨论】:

  • cyberciti.biz/faq/howto-set-date-time-from-linux-command-prompt ,并使用 os.system ...但您需要是 root(或 sudo)
  • 真的需要在 Python 中处理系统关于时间的行为吗?您可以将操作系统配置为使用 RTC 而不是 NPT。如果有可用的 NTP 源,你为什么要忽略它?常见的方法是使用它并在之后/关闭时同步到硬件时钟。

标签: python linux


【解决方案1】:

有人可能会想出更好的东西,但这是我过去的做法。

import subprocess
import datetime

try:
    subprocess.check_call("ntpdate") #Non-zero exit code means it was unable to get network time
except subprocess.CalledProcessError:
    dt = getRTCTime() # Get time from RTC as a datetime object
    subprocess.call(['sudo', 'date', '-s', '{:}'.format(dt.strftime('%Y/%m/%d %H:%M:%S'))], shell=True) #Sets system time (Requires root, obviously)

#Rest of code

【讨论】:

  • 当您将列表传递给subprocess 时,shell=True 通常是不正确的。
【解决方案2】:

在使用 Raspberry Pi 4 时遇到类似情况,我想根据一些输入更新系统时间。

import time

def update_time(unix_time_as_string):
    clk_id = time.CLOCK_REALTIME
    time.clock_settime(clk_id, float(unix_time_as_string))

在我的示例中,unix_time_as_string 来自网络界面,类似于“1581084210.006”。

【讨论】:

    猜你喜欢
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多