【问题标题】:What's a more pythonic way to do this?什么是更蟒蛇的方式来做到这一点?
【发布时间】:2014-02-14 16:55:13
【问题描述】:

我正在尝试创建一个功能来手动更改 Linux 机器上的日期/时间,在机器上使用 subprocess.calldate --set=。我的问题是试图找到一种更简洁/更 Pythonic 的方式将所有内容一起格式化以进入call

我这样做的原因是因为date 命令需要--set= 后跟一个字符串,而我想不出在subprocess.call 中以正确格式执行此操作的方法。

我知道理想情况下我应该只使用ntpd,但不幸的是这是我现在的要求。非常感谢任何帮助。

def set_system_time(year, month, day, hour, minute, second):
    """Set system time, numeric value formatted as 'YYYY-MM-DD HH:MM:SS'"""
    datetime = '--set=' + str(year) + '-' + str(month) + '-' + str(day) \
        + ' ' + str(hour) + ':' + str(minute) + ':' + str(second)
    subprocess.call(['date', datetime])

【问题讨论】:

  • 使用datetime 模块中的strptimestrftime。您的格式字符串应该大致类似于 fmt = '%Y-%m-%d %H:%M:%S' 这个问题有示例用法:stackoverflow.com/q/14762518/553404
  • 您应该使用不同的界面def set_system_time(my_datetime),然后使用strftime。这里有一个已删除的答案,我不确定他为什么删除它,因为这是最好的答案。
  • strftime 是一个不错的选择,但不适用于现有的一组参数。如果你得到像作者提出的问题一样的参数(而不是日期时间库),它与纯字符串格式相比没有优势。

标签: python python-2.7 subprocess


【解决方案1】:

使用字符串格式:

datetime = '--set={}-{}-{} {}:{}:{}'.format(year, month, day, hour, minute, second)

【讨论】:

    【解决方案2】:

    具有可变数量的参数(更短,但可读性较差,因为您看不到参数名称):

    def set_system_time(*a):
        datetime = '--set=%d-%d-%d %02d:%02d:%02d' % a
    

    使用固定数量的参数:

    def set_system_time(year, month, day, hour, minute, second):
        datetime = '--set=%(year)d-%(month)d-%(day)d %(hour)02d:%(minute)02d:%(second)02d' % locals()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 2023-01-08
      相关资源
      最近更新 更多