我正在尝试从PHP执行python脚本...但是我得到了一个奇怪的输出...在我的Python脚本中有GPIO语句来控制继电器和打印语句......现在很奇怪事情是print语句执行但不是GPIO语句...没有错误...我还提供了我的python文件的执行权限...我不知道是什么问题... Python被执行不“”GPIO“”:( :( 我使用的Python代码(relay.py)是:
import sys
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
pin=11
GPIO.setup(pin,GPIO.OUT)
i=sys.argv[1]
n=int(i)
if(n==0):
print(n)
GPIO.output(pin,GPIO.LOW)
if(n==1):
print(n)
GPIO.output(pin,GPIO.HIGH)
PHP(lightonoff.php)代码是:
<form method="post" action="php.php">
<input type="submit" value="on">
<input type="hidden" name="ct1" value="1">
</form>
<form method="post" action="php.php">
<input type="submit" value="off">
<input type="hidden" name="ct1" value="0">
</form>
php.php文件是:
<?php
$i=$_POST['ct1'];
$r=exec("/var/www/html/relay.py $i");
echo $r;
?>
答案 0 :(得分:0)
考虑使用passthru而不是exec,因此您可以在命令末尾使用2&gt;&amp; 1来读取命令的输出,因此STDERR和STDOUT也是可见的。 这会有所帮助。 另外,您可能需要执行CHMOD和CHOWN命令以确保权限并标记可执行字节标志。 另外,你也可能会在命令行解释器(在本例中为python)中使用shebang行。
另外,使用escapeshellcmd来清理$ _POST输入,这样攻击者就不会通过更改变量来执行任意shell命令!!
Should I put #! (shebang) in Python scripts, and what form should it take?