2012-07-11 151 views
0

我从一个PHP页面执行python脚本,像这样:exec("python ./test.py");PHP不执行python脚本正确

这个脚本,如果我不打开其中一个串行端口运行正常。但是,如果我这样做(这首先是调用python脚本的重点),那么该脚本无法正确执行。

如果我把它打印语句简单的Python脚本 -

print "This works!" 

然后我得到我的PHP页面所需的输出。 但是,如果我打开一个串行端口,我不再获得的“这个作品!”的输出,以及串行数据不获取发送到接收设备 -

import serial 
ser = serial.Serial("/dev/ttyACM0",9600) 
print "This works!" 

两个脚本的命令运行良好线。

这是一个php限制吗?我尝试了其他的执行方法,如popensystem,但他们也不适合我。

+3

从命令行运行完成与您的权限。在Apache下运行它是通过Apache的权限执行的。检查apache是​​否可以打开ttyACM0。 – 2012-07-11 02:52:54

+0

将exec()更改为system()以查看输出。 – 2012-07-11 02:55:11

+0

@MarcB我该怎么做呢? – penguinrob 2012-07-11 03:02:44

回答

2

也许你没有从你的Python执行中获得完整的错误报告。尝试添加raise Exception('Boo!')作为您的第一行Python程序,以确定您是否是。如果你没有得到例外和回溯,那么你的程序可能在serial.Serial行失败,但你没有听说它。

+0

我从命令行运行时遇到异常,但从php运行时没有任何异常。编辑:这是在*任何*其他之前的例外。 – penguinrob 2012-07-11 03:00:47

+0

如果我在异常之前添加打印语句,我会得到它的输出。但它仍然不会输出异常 – penguinrob 2012-07-11 03:05:02

+1

这听起来像你正在得到stdout而不是stderr。要么修复你的进程产卵,所以你得到stderr,或者包装你的整个Python程序,以便错误处理转到stdout。 – 2012-07-11 03:06:46