从PHP调用无尽的Python脚本

时间:2014-02-09 15:29:38

标签: php python raspberry-pi infinite-loop

我有一个调用python脚本的PHP脚本。两者都在同一个Linux服务器上运行。

Python脚本在“while true”循环中运行。现在,当我启动PHP脚本时,它仍处于无限循环中,永远不会结束。

如果我在Python中删除循环,那么PHP正在运行。

PHP:

<html>
 <head>
   <title>PHP</title>
 </head>
 <body>
  <?php 
      shell_exec('sudo python /home/pi/blink.py 1); 
  ?> 
 </body>
</html>

的Python:

#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
import sys

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.cleanup()

GPIO.setup(4, GPIO.OUT)

def blink(self):
    while True:
        time.sleep(0.5);
        GPIO.output(4, GPIO.LOW)
        time.sleep(0.5);
        GPIO.output(4, GPIO.HIGH)

if  str(sys.argv[1]) is '1':
     blink("")
else:
     GPIO.output(4, GPIO.LOW)

编辑: 如何使用PHP正确启动带有无限循环的Python脚本?

3 个答案:

答案 0 :(得分:1)

好吧,一个选择是包含Linux'&amp;'在你的shell_exec()函数中。这使得命令在后台运行,但是你不能(很容易地)从脚本中停止它。 然后代码成为(注意'&amp;'):

<html>
 <head>
   <title>PHP</title>
 </head>
 <body>
  <?php 
      shell_exec('sudo python /home/pi/blink.py 1 &'); 
  ?> 
 </body>
</html>

这使脚本永远在后台运行,或者至少在Pi重新启动之前运行。

答案 1 :(得分:0)

exec() — Execute an external program
for more details [php manual][1]

答案 2 :(得分:0)

感谢Robert Diepeveen

  

/ dev / null&amp;

这是缺失的作品

<html>
  <head>
    <title>PHP</title>
</head>
<body>
    <?php 
          shell_exec('sudo python /home/pi/blink.py 1 > /dev/null &');
    ?> 
</body>