我有一个调用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脚本?
答案 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>