2014-02-09 85 views
0

我有一個調用python腳本的PHP腳本。兩者都運行在同一臺Linux服務器上。從PHP調用無限的Python腳本

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

究竟你的問題在這裏? – RobertDiep

+0

@Robert:我想是這樣的:「我如何正確啓動一個Python腳本,並且使用* PHP進行無限循環*」。 –

+0

你想停止你的循環? –

回答

1

好的,一個選項是在shell_exec()函數中包含Linux'&'。這使命令在後臺運行,但不能在腳本中輕鬆地停止它(很容易)。然後 代碼變成(注意「&」):

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

這使得在後臺運行永遠的腳本,或者至少直到丕重啓。

+0

不幸的是,參數'&'不會改變任何東西。 PHP腳本在無盡的循環中繼續。 – Blindsurfer

+0

對,也許這是因爲輸出應該被重定向到/ dev/null。因此,它變成'shell_exec('sudo python /home/pi/blink.py 1>/dev/null&')'。這是否工作? – RobertDiep

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

我嘗試了命令: exec('sudo python /home/pi/blink.py 1&',$ output,$ return_var); 但結果是一樣的 – Blindsurfer

0

感謝羅伯特Diepeveen

的/ dev/null的&

這是缺少的部分

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