【问题标题】:change date/time using python in linux在linux中使用python更改日期/时间
【发布时间】:2015-03-30 13:51:21
【问题描述】:

我尝试在 debian linux 中使用date 命令更改系统时间:

os.system("echo passwd | "sudo date -s \"Thu Aug 9 21:31:26 UTC 2012\")

我将 python 文件权限设置为777,并将chown 设置为root。但它不起作用并说date: cannot set date: Operation not permitted。有什么想法吗?

谢谢

【问题讨论】:

  • 它没有给我任何问题(我正常执行)。尝试使用 sudo 运行 .py。就我而言,权限是 == -rw-r--r--
  • 您的引用错误,请尝试:os.system("echo passwd | 'sudo date -s \"Thu Aug 9 21:31:26 UTC 2012\"'")
  • @cdarke,当我使用 sudo 时,它可以工作。但我想在不写 sudo 的情况下运行它。
  • 这不是你的问题,这与 Python 无关。

标签: python linux date time


【解决方案1】:

Sudo 不从标准输入获取密码,而是从终端设备获取密码。

将您的date 添加到 sudoers 文件中,这样您就可以在没有密码的情况下以 root 身份运行它。男人 sudoers。

bob     ALL = NOPASSWD: /bin/date

接下来,使用 subprocess 而不是 os.system。

sudodate = subprocess.Popen(["sudo", "date", "-s", "Thu Aug  9 21:31:26 UTC 2012"])
sudodate.communicate()

【讨论】:

  • 您可以pass the password to sudo via stdin if you must,但在大多数情况下更新sudoers(创建/etc/sudoers.d/date)是更好的选择。不要使用.communicate(),除非某些标准流被重定向(使用PIPE)。请改用subprocess.check_call()。要隐藏子进程的输出,请参阅this question
  • @ChadMiller,感谢您的评论。我学到了很多 ;),但是在我看到你的评论之前,我尝试制作另一个 python 文件,我写了os.system("echo passwd | sudo -S python file.py") 并在没有sudo 的情况下运行。它工作 0_o 。是不是有点奇怪?!
【解决方案2】:

你做了一个小写 -s 它应该是 -S 所以这就是它不起作用的原因。

【讨论】:

  • 我的 Ubuntu 16.04 bash 列出了 date -s 的 STRING 条目。
  • 我的 Debian 11.1 bash 列出了 date -s 的 STRING 条目
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 2018-11-08
相关资源
最近更新 更多