You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 18.04下使用Python3调用date命令设置系统时间失败如何解决?

解决方案

你的实现方向没有问题,执行失败的核心原因是sudo命令默认需要交互式输入密码,Python调用subprocess时默认不会接管终端输入,因此权限验证失败导致命令无法执行;无sudo前缀时普通用户默认没有修改系统时间的权限,自然会报错。

可行方案

  • 方案1:配置sudo免密执行date命令(最推荐,生产环境可用)
    操作步骤:

    1. 终端执行sudo visudo打开sudo规则编辑界面(visudo会自动校验语法,避免写错规则导致sudo无法使用,不要直接修改/etc/sudoers文件)
    2. 在文件末尾添加如下内容,替换你的用户名为实际登录的用户名:
    你的用户名 ALL=(ALL) NOPASSWD: /bin/date
    
    1. 按Ctrl+O保存,按Enter确认文件名,再按Ctrl+X退出编辑
    2. 终端执行which date确认date命令路径为/bin/date,如果路径不同,替换上面配置里的路径即可
      配置完成后你原来的subprocess代码就可以正常运行,不需要修改代码。
  • 方案2:给Python脚本授予root运行权限
    直接以root身份运行Python脚本即可,不需要修改代码:

    sudo python3 你的脚本名.py
    

    如果是作为系统服务运行,在systemd配置文件中设置User=root即可。

  • 方案3:subprocess传入sudo密码(仅测试用,不推荐生产环境使用)
    可以通过subprocess的stdin把sudo密码传入,缺点是密码会明文写在代码中,有极大安全风险:

    import subprocess
    
    sudo_password = "你的sudo密码"
    # currenttime格式需符合 "YYYY-MM-DD HH:MM:SS"
    result = subprocess.run(
        ["sudo", "-S", "date", "-s", currenttime],
        input=f"{sudo_password}\n".encode("utf-8"),
        capture_output=True
    )
    # 可以通过result.returncode判断是否执行成功,0为成功
    

额外注意事项

  • 传入的currenttime必须和date -s要求的格式一致,推荐统一使用%Y-%m-%d %H:%M:%S格式的字符串
  • Python3.5及以上版本更推荐使用subprocess.run而非Popen,可以更方便的获取执行结果和返回值

内容的提问来源于stack exchange,提问作者최용근

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 15:15:02