2012-07-11 167 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