2014-09-02 39 views
1

我想從一個運行在web服務器上的php腳本啓動一個python應用程序。 到目前爲止,這麼好。我試過來自PHP的命令行調用未執行

passthru("python track.py"); 

但它沒有工作。根本沒有發生。我嘗試了exec()和system()以確保。 然後我試圖與運行PHP腳本:

passthru("php test.php"); 
passthru("/usr/bin/php test.php") 

還是什麼都沒有發生。但一個

passthru("ls") 

只是正常工作正常。

我設置了每個用戶都可以編輯和運行這些文件的權限。

+4

'passthru(「/ path/to/python /some/path/to/track.py」);' – AbraCadaver 2014-09-02 17:34:20

+0

無法正常工作:( – daniel7558 2014-09-02 18:27:18

回答

0

這聽起來像是網絡服務器用戶無法讀取相關文件的情況。

不幸的是,passthru()只是返回NULL如果一個命令失敗,而不是引發異常。例如,即使這樣的廢話var_dump(passthru('foobar'));返回NULL

你如何解決這個問題?您可以通過命令行測試,如果Web服務器將能夠執行命令(假設www-data是你的網絡服務器的用戶,你有sudo的權限):

sudo su - www-data -c 'python track.py' 

這樣一來,你會得到一個有意義的錯誤消息並能解決問題。

+0

Web服務器用戶是守護進程(只需安裝xampp即可啓動並運行)當我執行你給我的命令時,我得到錯誤'This account is currently not available.'。之後,我關閉了xampp,因爲我認爲它可能會阻止,但同樣的錯誤一次又一次地傳出來 – daniel7558 2014-09-02 21:45:28

+0

這通常意味着守護進程用戶沒有真正的shell,而是像'/ bin/false'或'/ usr/sbin/nologin',你可以用'grep^daemon/etc/passwd'(最後一列)來檢查。設置一個不同的shell如bash,運行'sudo usermod -s/bin/bash daemon'並再次嘗試上面的東西(注意:從安全角度來看,允許守護進程用戶使用交互shell是有意義的,但是如果你想使用'passthru',你必須這樣做。)順便說一句,你不要爲此,不需要關閉XAMPP。 – lxg 2014-09-02 21:58:33

+0

謝謝。現在它啓動python腳本,但我得到了一個奇怪的錯誤。 '/usr/lib/python2.7/dist-packages/IPython/utils/path.py:304:UserWarning:IPython父'/ usr/sbin'不是使用臨時目錄的可寫位置。 '我不確定是否應該打開一個新線程,因爲它看起來像一個權限問題。也許你可以幫助我,以及:) – daniel7558 2014-09-03 13:57:20