将变量从php传递到python脚本并运行os.system()


Pass variable from php to python script and run os.system()

我需要用php脚本设置树莓派的日期和时间。经过一番研究,我使用php脚本调用python脚本。My datetime.php:

$date = '2015-09-05'; 
$output = shell_exec('/usr/bin/python/home/pi/datalogger/modules/sys/write_date.py ' . $date);
echo $output;
os.system("sudo date -s "+"'"+date_object+"'")

write_date.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
from datetime import datetime
def main():
    date=sys.argv[1]
    time='22:04'
    print(date) #for debug
    string_date=date+' '+time+':00'
    date_object2=datetime.strptime(string_date, "%Y-%m-%d %H:%M:%S")
    date_object=date_object2.strftime("%a %b %d %H:%M:%S"+" UTC "+"%Y")
    os.system("sudo date -s "+"'"+date_object+"'")
if __name__ == '__main__':  
    main()

当我刷新我的datetime.php我得到了我的日期打印,所以脚本工作…问题是我的约会没有更新。但是如果我在命令行运行write_date.py,我可以更新树莓的日期时间。

在基于Linux的系统(例如树莓派)上通过PHP设置日期的示例:

<?php
date_default_timezone_set('UTC');
$dt = date("D M j G:i:s T Y", strtotime("2015-09-05 22:04"));
$output = shell_exec('sudo date -s "$dt"');
?>

strptime()strftime()也存在于PHP中:

http://php.net/manual/en/function.strptime.php

http://php.net/manual/en/function.strftime.php

深入挖掘,您可能需要允许您的Web服务器通过调整/etc/sudoers文件来执行/bin/date。可以添加:

apache <hostname> = (root) NOPASSWD: /bin/date

运行cat /etc/hostname确认<hostname>。我怀疑是覆盆子或树莓。修改它以适合您的设备。

然后运行,我们对脚本做一个小的改变:

$output = shell_exec('sudo /bin/date -s "$dt"');

应该可以了。在这里找到这个信息:https://unix.stackexchange.com/questions/44865/change-server-date-using-php