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

时间:2015-10-05 22:48:51

标签: php python variables os.system

我需要用php脚本设置我的覆盆子pi的日期和时间。 经过一些研究后,我使用php脚本来调用python脚本。 我的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我的命令行,我可以更新raspberry的日期时间。

1 个答案:

答案 0 :(得分:0)

在基于Linux的系统(E.G. Raspberry Pi)上通过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"');
?>

PHP中还存在strptime()strftime()

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

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

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

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

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

然后运行,我们在之前对脚本进行了一次小的更改:

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

应该这样做。在此处找到此信息:https://unix.stackexchange.com/questions/44865/change-server-date-using-php