从php调用时,将RPi.GPIO导入为不在python中工作的GPIO

从php调用时,将RPi.GPIO导入为不在python中工作的GPIO,php,python,linux,raspberry-pi,Php,Python,Linux,Raspberry Pi,我的问题和这个问题一样, 但现在我要说的是另一件事 脚本是从命令行(python-uit.py)运行的,一个表示“hello”的test.py也可以运行,但是当从php调用uit.py(下面的源代码)时,它就不起作用了。 我得到的只是返回代码1,我尝试了exec()、passthru()和system(),,它们都只返回“1” 我对linux和python非常陌生,所以我不知道如何设置直接导入路径而不是相对导入路径(如果这样有帮助的话) 编辑: 我现在注意到的是,当脚本从命令行运行时,我必须su

我的问题和这个问题一样, 但现在我要说的是另一件事

脚本是从命令行(
python-uit.py
)运行的,一个表示“hello”的
test.py也可以运行,但是当从php调用
uit.py
(下面的源代码)时,它就不起作用了。 我得到的只是返回代码1,我尝试了
exec()、passthru()和system(),
,它们都只返回“1” 我对linux和python非常陌生,所以我不知道如何设置直接导入路径而不是相对导入路径(如果这样有帮助的话)

编辑: 我现在注意到的是,当脚本从命令行运行时,我必须
sudo
它,因为脚本说它希望以
root
身份运行(当我不以root身份运行它时,我得到一个错误,说“可能以root身份运行?”

这可能是不能工作的原因吗?当用户PHP运行时,python脚本会从PHP调用吗

我确实用
sudo
执行了该语句(请参阅注释),但我也读到,可能php用户不允许
sudo

我现在注意到的是,当脚本从命令行运行时,我必须sudo它,因为脚本说它希望以root身份运行(当我不以root身份运行它时,我得到一个错误,说“可能以root身份运行?”)

这可能是不能工作的原因吗?当用户PHP运行时,python脚本会从PHP调用吗


是的,这是您的问题。web服务器以
www data
的身份运行,而不是以root用户的身份运行。(默认情况下,此用户甚至没有sudo访问权限。)如果查看web服务器错误日志,您可能会看到“可能以root用户的身份运行?”其中有错误消息。

如另一篇文章中所述:在脚本中添加
import sys;print sys.path
时,您会得到什么?如下所示:['/var/www'、'/usr/lib/python2.7'、'/usr/lib/python2.7/plat-linux2'、'/usr/lib/python2.7/lib-tk'、'/usr/lib/python2.7/lib-old'、'/usr/lib/python2.7/lib-dynload'、'/usr/local/lib/python2.7/dist-packages'、'/usr/lib/python2.7/python2.7']因为我不太喜欢Linux:有没有一个特定的位置应该放在
RPi.GPIO
上?我是通过
apt get
安装的,但我不知道Linux中二进制文件存储在哪里(相当于windows中的c:\program files\有几件事需要注意。print语句输出将转到stdout,因此要从脚本中收集输出,您的php代码需要从stdin中读取。(我对php一无所知,因此您需要查看如何执行。其次,检查php调用的python版本(它甚至可能根本无法成功运行python。)我不知道php是在脚本中使用#!还是需要显式运行python,并将脚本作为参数传递。@Tim,python脚本正在运行,我正在获取输出:我有一个名为
test.py
的小脚本,我可以在php中获取输出。我还可以从PHPHi中的
print sys.path
获取输出,我在哪里可以找到它d该日志?(接下来,如何查看www数据用户是否具有sudo权限?)除非您更改了内容,否则错误日志可能位于
/var/log/apache2/error.log
,并且
www-data
没有sudo权限。啊,使用lighttpd也没有提到。查看这些日志,没有什么可看的。但也可能是在此类错误被记录之前需要设置某种日志级别d、 嗯,奇怪的是,我从来没有在我的问题中提到我使用lighttpd代替apache,后者通常用于更改www数据用户的权限,因此它也有sudo权限,而且它可以工作!
#!/usr/bin/python
# Hello world python
import RPi.GPIO as GPIO
print "Start";

GPIO.setmode(GPIO.BOARD);
GPIO.setup(16, GPIO.OUT)
GPIO.output(16, True)

print "Licht uit";