【问题标题】:How to activate a python script with php and not have the page load while time.sleep is going如何使用 php 激活 python 脚本并且在 time.sleep 进行时不加载页面
【发布时间】:2019-05-08 23:24:43
【问题描述】:

使用 php 和 python 我想激活一个 python 脚本 zone_on.py。我的代码工作正常,但是只要设置了 php if 语句,我的页面就会加载并且不能用于整个 python 脚本长度。我希望激活脚本,然后在执行 python 脚本时 php 恢复工作。 这是我的 php if 语句:

$zone_on = $_GET['on'];
if (isset($zone_on)){
  $command = escapeshellcmd("python zone_on.py --zone $zone_on");
  shell_exec($command);
  // echo $output;

} 

这是我的名为 zone_on.py 的 python 脚本

import time
import argparse
import mysql.connector


number_of_zones = 7
ap = argparse.ArgumentParser()
ap.add_argument("-z", "--zone", type=str, required=True,
    help="zone number to turn on")
args = vars(ap.parse_args())



zone = [8, 7, 10, 9, 14, 15, 18, 23, 24, 25]


#time to run each zone
zone1_time = 100
zone2_time = 2
zone3_time = 2
zone4_time = 2
zone5_time = 2
zone6_time = 2


zone1  = [zone[0], zone1_time, 1]

zone2  = [zone[1], zone2_time, 2]

zone3 = [zone[2], zone3_time, 3]

zone4 = [zone[3], zone4_time, 4]

zone5 = [zone[4], zone5_time, 5]

zone6 = [zone[5], zone6_time, 6]



zone_num = args["zone"]

def openCloseValves(valve, zone_time, zone_num):
        print "Opening Zone", zone_num,"for",zone_time,"seconds"
        time.sleep(1.0)
        # GPIO.setup(valve, GPIO.OUT)
        print("Open")# GPIO.output(valve, GPIO.LOW)    # Open valve
        time.sleep(zone_time)
        print("Closed")
        # GPIO.output(valve, GPIO.HIGH)   # Close valve
        time.sleep(1.0)


def run_sprinklers():
    if zone_num == "1":
        openCloseValves(zone1[0],zone1[1], zone1[2])
    if zone_num == "2":
        openCloseValves(zone2[0],zone2[1], zone2[2])
    if zone_num == "3":
        openCloseValves(zone3[0],zone3[1], zone3[2])
    if zone_num == "4":
        openCloseValves(zone4[0],zone4[1], zone4[2])
    if zone_num == "5":
        openCloseValves(zone5[0],zone5[1], zone5[2])
    if zone_num == "6":
        openCloseValves(zone6[0],zone6[1], zone6[2])

run_sprinklers()

【问题讨论】:

    标签: php python html


    【解决方案1】:

    默认情况下 exec (shell_exec($command);) 是阻塞的,为了让它在后台运行你必须假设你不想要它来处理输出,我们只是把它扔进 void (null)

    shell_exec("$command > /dev/null 2>/dev/null &");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多